APIリクエストを送信する必要があります。何らかの理由で、サーバーはCURL要求をブロックしていますが、XHR ajax要求は承認します。 Ajaxリクエストを送信できましたが、別の問題が発生します-私のWebサイトはHTTPS経由で提供されますが、送信する必要があるリクエストはHTTP経由であるため、ajaxを使用できません。
私はCURLを介してajaxリクエストをシミュレートする方法を探しています。何らかの方法で、CURLリクエストが実際にajaxリクエストであると信じるようにサーバーをだます。
これが私が試したことです。
これは私のCURLリクエストです。
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64)');
curl_setopt($ch, CURLOPT_REFERER, 'server's url');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept:application/json, text/javascript, */*; q=0.01',
'Accept-Encoding:gzip, deflate',
'Accept-Language:en-US,en;q=0.9',
'Connection:keep-alive',
'Content-Type: application/json; charset=utf-8',
'X-Requested-With: XMLHttpRequest',
'__RequestVerificationToken: $token'
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, base_path().'/cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, base_path().'/cookies.txt');
$buffer = curl_exec($ch);
if(curl_error($ch))
{
$buffer = curl_error($ch);
}
curl_close($ch);
return $ buffer;このカールリクエストはブロックされています
ただし、このajaxリクエストはローカルホストを経由しますが、ライブWebサイトはHTTPSを使用しているため、実際には使用できません。
$.ajax({
type: "get",
xhrFields: { withCredentials:true },
url: http://apiendpoint.com,
success: function(data)
{
// console.log(data);
}
})
クロムでは、開発者ツールバーから作業カール式をコピーできます。 CLIから試してみてください。それが機能する場合、どの部品が必要で、どの部品が必要でないかを把握できます。その後、phpにそれを転写することができます。
Curlからではなくphpからも同じことが起こるかどうか疑問がある場合は、 requestbin で試してください。
$ a == 1が与えられると、 '$ a'は$ aに変換されますが、 "$ a"は "1"に変換されるため、トークンのヘッダーが思ったとおりではない可能性があると思います(一重引用符対二重引用符)。
あなたの例では、置き換えてみてください:
'__RequestVerificationToken: $token'
で:
"__RequestVerificationToken: $token"
それが問題を解決するかどうかをお知らせください。
Passthru( "curl command here ...");の使用を検討してください。リンタバからの提案を使用して