2017-07-26 19 views
1

PHPでcurlでリダイレクトを解決できません。私はURL https://data.fei.org/Horse/Search.aspxを呼び出しますが、結果として私はログインサイトを取得します。これはすべてのサーバーで発生するわけではありません。テスト環境では、フィンは動作しますが、プロダクションサーバーは動作しません。それは私のカールイニシャルですPHP curlが別のサイトにリダイレクトする

$url = "https://url.org/Search.aspx"; 
$checkFile = tempnam('/tmp', 'cookie.txt'); 
$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_PROXY, "my.proxy.com:8080"); 
curl_setopt($ch, CURLOPT_PROXYPORT, 8080); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/x-www-form-urlencoded' 
)); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); 
curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $checkFile); 
curl_exec($ch); 

私は生産環境ではリダイレクトされていますが、テスト環境ではリダイレクトされません。

+0

何が起こっているか調べる:https://stackoverflow.com/questions/3757071/php-debugging-curl –

+0

プロキシの設定を確認する必要がありますか? –

答えて

0

最高の推測:テストサーバーでは、/ tmpへの書き込みアクセス権があり、そこに新しいファイルを作成できますが、運用サーバーでは/ tmpへの書き込みアクセス権はありません。 tempnamの戻り値の型をチェックしないので、プロダクションサーバーのCURLOPT_COOKIEFILEにcurl bool(false)を渡し、curlはクッキーを保存/ロードできず、リクエスト#1で受信したクッキーをフォローアップに提供できませんロケーションリダイレクトリクエスト#2 - 無効なCookieファイルがあるため。チェックのより多くのエラーを追加し、検証する

(これもstackoverflowの上で尋ねる前に、あなたが最初の場所で行われているはず何実際にある)

$checkFile = tempnam('/tmp', 'cookie.txt'); 
if(false===$checkFile){ 
    throw new \RuntimeException('tmpnam failed to create cookie temp file!'); 
} 

カールコードをデバッグするときにもprotip、常にCURLOPT_VERBOSEを有効にします、すべてのリダイレクト、すべてのリダイレクトで送信されたすべてのクッキーなど、多くの有用なデバッグ情報を出力します。

同じメモに、curl_setoptにもエラーチェックを追加してください。 curlオプションを設定すると何かがうまくいかなかった場合、curl_setoptはbool(false)を返します。私のカールラッパーで、私がやる

$ret = curl_setopt ($this->curlh, $option, $value); 
    if (! $ret) { 
     throw new InvalidArgumentException ('curl_setopt failed. errno: ' . $this->errno() . '. error: ' . $this->error() . '. option: ' . var_export ($this->_curlopt_name ($option), true) . ' (' . var_export ($option, true) . '). value: ' . var_export ($value, true)); 
    } 

別の可能性はあなたのprodサーバーは、IP禁止にログインするからであるということである。(https://github.com/divinity76/hhb_.inc.php/blob/master/hhb_.inc.php#L997から)良いスタートがにカールリクエストをデバッグすることです

+0

Webアプリケーション内のディレクトリへのパスを設定して動作するようになりました – Marlowe

関連する問題