-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 を操作していません。

これらの 2 行の 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']

http ストリーム タイプの代わりに CURL を使用する必要がある場合は、これを適切な CURL オプションに簡単に変換できます。

つまり、実際のエラーは です。これはCould not resolve host: en.tty.is、単に en.tty.is が存在しないことを意味します。ただし、これは実際のサーバーではないと言うので、これは偽のエラーである可能性があります。

于 2013-04-26T11:54:09.657 に答える