症状: phpのcurl呼び出しでhttpsエラーが発生します。
トラブルシューティング方法: コマンドラインでcurl呼び出しを使用してみてください。
原因: サーバーが配置されているコンピューター室では SSL 証明書を検証できません。
回避策: SSL 証明書のチェックをスキップします。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
症状:phpのcurlはcurl_execを呼び出してbool(false)を返しますが、コマンドラインのcurlの呼び出しは正常です。
トラブルシューティング方法:
var_dump(curl_error($ch));
Return:
string(23) "サーバーからの空の応答"
再度トラブルシューティング:
curl_setopt($ch, CURLOPT_HEADER, true); t( $ch, CURLOPT_RETURNTRANSFER, false);
Return: HTTP/1.1 100 Continue
Connection: close
原因: php Curl は HTTP 100 を受信した後に終了し、引き続き HTTP 200 を受信する必要があります
解決策: curl_setopt( $ ch, CURLOPT_HTTPHEADER, array('Expect:'));
PHP と cURL: 100- continue ヘッダーの無効化
2006 年 6 月 15 日公開 私は cURL を (PHP 経由で) 使用して、一種のプロキシを構築してきました。私が取り組んでいるプロジェクトでは、(HTTP ステータスを回復するために) 返されたヘッダーを解析する必要があるため、以前は正常に動作していましたが、今回は何らかの理由で問題が発生しました。返された内容を詳しく調べてみると、何らかの理由で、Apache が「通常の」ヘッダーの前に次のような追加の応答ヘッダーを追加していることが判明しました:
HTTP/1.1 100 Continue
HTTP/1.1 200 OK 日付: 2006 年 6 月 9 日金曜日15:23:42 GMT
サーバー: Apache
...少しグーグルで調べてみると、これは cURL がデフォルトで送信するヘッダーに関係していることがわかりました:
Expect: 100- continue
…これは、Apache に送信するよう指示します。余分なヘッダーをかなり調べましたが、PHP でヘッダーを手動で削除する以外に実行可能な解決策が見つかりませんでした。最終的に、直感でこれを試しました:
curl_setopt( $curl_handle , CURLOPT_HTTPHEADER, array( 'Expect:' ) );
…これは基本的に元の 'Expect:' ヘッダーを空のヘッダーでオーバーライドします
これが誰かに役立つことを願っています。