-1

再一次,我需要你的帮助。我的客户希望使用 REST 服务器进行一些数据加密。我在 Python 中获得了一个有效的代码片段。(我不了解 Python,所以我会相信他的话)。我需要让它在 PHP 中工作。

注意:我使用的是 Windows 和 XAMPP,因此如果您考虑到这一点,我们将不胜感激。REST 服务器也不是真正的服务器,我不想公开。

我是使用 cURL 的新手,所以不确定我缺少什么来使它工作。现在我有一个错误指出:“无法解析主机:en.tty.is;没有请求类型的数据记录”。

这是Python代码:

input = urllib.urlencode({‘plaintext’: ‘some secret information’})
cyphertext = urllib2.urlopen(‘https://en.tty.is/encrypt’, input).read()

这是我一直试图在 PHP 中使用 cURL 7.24.0 实现的目标:

$url ="https://en.tty.is/encrypt";
            $data = json_encode(array('plaintext'=>$txt));

            $ch = curl_init();
            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt ($ch, CURLOPT_CAINFO, MY_CAINFO_PATH);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);   
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

            $chleadresult = curl_exec($ch);
            $chleadapierr = curl_errno($ch);
            $chleaderrmsg = curl_error($ch);
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);

            if(!$chleadresult){ 
                echo $chleaderrmsg;die;
            }

非常感谢任何帮助。谢谢!

4

1 回答 1

2

您的代码可能还有其他问题,但至少您的 PHP 和 Python 并不等同。

阅读 和 的urllib.urlencode文档urllib2.urlopen。这些不是在操纵 JSON。

这两行 Python大致相当于这个 PHP:

$input = http_build_query(array('plaintext'=>'some secret information'));
$ctx_post_input = stream_context_create(array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content'   => $input,
    ),
));
$cyphertext = file_get_contents('https://en.tty.is/encrypt', false, $ctx_post_input);

请参阅http 上下文选项以了解$ctx_post_input['http'].

如果您需要使用 CURL 而不是 http 流类型,您可以轻松地将其转换为适当的 CURL 选项。

也就是说,您的实际错误是Could not resolve host: en.tty.is,这非常简单地意味着 en.tty.is 不存在。但是你说这不是真正的服务器,所以也许这是一个虚假的错误。

于 2013-04-26T11:54:09.657 回答