簡體   English   中英

如何使用 PHP CURL 模擬 Ajax 請求?

[英]How to emulate Ajax request using PHP CURL?

當我發送帶有以下 CURL 的 Ajax 請求時,我收到 400 http_code 錯誤是我的代碼。

    $header = array(
    "Accept : application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding : gzip, deflate",
    "Accept-Language : en-US,en;q=0.5",
    "Content-Type : application/json; charset=UTF-8",
    "Host : https://some.com",
    "Referer : https://some.com/dashboard/reports",
    "X-Requested-With : XMLHttpRequest"
     );
    $c      = curl_init('https://domain.com/report.php');
    //curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    //curl_setopt($c, CURLOPT_VERBOSE, true);

    curl_setopt($c, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt( $c, CURLOPT_POST, true );
    curl_setopt( $c, CURLOPT_POSTFIELDS, $data_url );
    curl_setopt($c, CURLOPT_HTTPHEADER, $header);
    //curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Requested-With: XMLHttpRequest"));

    curl_setopt($c, CURLOPT_COOKIEFILE, $cookie_jar);
    $page     = curl_exec($c);
    $httpcode = curl_getinfo($c);

// 發出 Curl 請求后,我得到以下響應

Array
(
    [url] => some_url
    [content_type] => 
    [http_code] => 400
    [header_size] => 70
    [request_size] => 935
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.205562
    [namelookup_time] => 0.000132
    [connect_time] => 0.032866
    [pretransfer_time] => 0.170225
    [size_upload] => 272
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 1323
    [download_content_length] => 0
    [upload_content_length] => 272
    [starttransfer_time] => 0.205498
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

    [primary_ip] => 66.35.58.70
    [primary_port] => 443
    [local_ip] => 198.1.92.85
    [local_port] => 53627
    [redirect_url] => 
)
//// 

我不確定它是否會對您有所幫助,但我能夠使用以下代碼成功查詢 SSL 站點。 有幾個東西,如用戶代理、cookiefile、SSL 驗證、為發布數據編碼的 url 表單和后續請求應該使用相同的 cookie 和代理數據

 $config['useragent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);
curl_setopt($ch, CURLOPT_REFERER, 'http://google.com/');
$dir = dirname(__FILE__);
$config['cookie_file'] = $dir."/".md5($_SERVER['REMOTE_ADDR']) . '.txt';
curl_setopt($ch, CURLOPT_COOKIEFILE, $config['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $config['cookie_file']);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_NOBODY, 0);    
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_HEADER,0);
$html=curl_exec($ch);

后續調用請求(注意是第一次請求生成的cookie,useragent)

$post = 'city_id=3&length-3';
$headers = array();
$headers[] = 'Accept: application/json, text/javascript, */*; q=0.01'; 
$headers[] = 'Accept-Language: en-US,en;q=0.5';
$headers[] = 'Content-Length:'.strlen($post);
$headers[] = 'Content-Type: application/x-www-form-urlencoded; charset=utf-8';
$headers[] = 'X-Requested-With: XMLHttpRequest';

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$link);
curl_setopt($ch, CURLOPT_USERAGENT, $config['useragent']);          
curl_setopt($ch, CURLOPT_COOKIEFILE, $config['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $config['cookie_file']);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_NOBODY, 0);    
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_HEADER,0);
$linkhtml=curl_exec($ch);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM