再一次,我需要你的帮助。我的客户希望使用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;
}
非常感谢任何帮助。谢谢!
答案 0 :(得分: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);
有关$ctx_post_input['http']
的结构,请参阅the http context options。
如果您需要使用CURL而不是http流类型,您可以轻松地将其转换为适当的CURL选项。
那就是说,你的实际错误是Could not resolve host: en.tty.is
,这意味着en.tty.is不存在。但是你说这不是真正的服务器,所以这可能是一个虚假的错误。