2017-09-02 46 views
1

我嘗試發送請求(POST請求)到URL,但它返回PHP的捲曲HTTP/1.1 400錯誤的請求

HTTP/1.1 400 Bad Request 
content-disposition: attachment; filename=json.json 
content-length: 118 
content-type: application/json;charset=utf-8 
date: Sat, 02 Sep 2017 11:33:56 GMT 
server: tsa_o 
strict-transport-security: max-age=631138519 
vary: Origin 
x-connection-hash: 32931e6376249fb1689df3203e847a2b 
x-content-type-options: nosniff 
x-frame-options: SAMEORIGIN 
x-response-time: 108 
x-transaction: 0021b7c8005c6a4e 
x-tsa-request-body-time: 1 
x-xss-protection: 1; mode=block 

{ 「capsError」: 「insufficientpermission」, 「將requestId」: 「4f0c87b1349996812fafe51ca6a8197b5bb1e9d560d7dcb8a450ab 3c890e40ac」 }

我的代碼

$ch = curl_init(); 
curl_setopt_array($ch, array(
    CURLOPT_URL => $URL, 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => 'postField', 
    CURLOPT_COOKIEJAR => realpath("cookies/" . $name . ".txt"), 
    CURLOPT_COOKIEFILE => realpath("cookies/" . $name . ".txt"), 
    CURLOPT_CONNECTTIMEOUT=>30, 
    CURLOPT_HEADER   => true,  // return headers      
    CURLOPT_SSL_VERIFYPEER=>true, 
)); 
$output = curl_exec($ch); 
curl_close($ch); 
return $output; 

蔭當然從所有後場,但同樣的響應返回 但在瀏覽器EV一切都可以

回答

0

首先,您可以將$output = curl_exec($ch);更改爲echo $output = curl_exec($ch);。這樣您將在瀏覽器中看到錯誤消息。

另外,試試urlencode($ url);萬一你的網址有一些空白的地方。

但您的問題很可能是目標服務器的安全性。很多服務器將cURL視爲跨站點僞造攻擊。這就是爲什麼任何cURL腳本必須包含目標頁面的csrf令牌才能發佈參數。

您必須先從您的目標頁面找到令牌,然後編寫代碼,以便您的腳本將解析出curl_exec輸出字符串中的令牌。

+0

感謝您的重播這是返回的值HTTP/1.1 400錯誤請求 內容處置:附件;文件名= json.json 內容長度:118 content-type:application/json; charset = utf-8 date:Sat,02 Sep 2017 12:34:26 GMT server:tsa_o strict-transport-security:最大年齡= 631138519 變化:原產 的x連接的散列:ee1dbbca70af69c7815edcb505d16533 的x內容類型選項:nosniff X框選項:SAMEORIGIN 的x響應時間:107 的x事務:00d500270066af4b x-tsa-request-body-time:1 x-xss-protection:1; mode = block' – Looper

+0

'{「capsError」:「權限不足」,「requestId」:「6bcb762e8d2c9039b0eb715f252944924fb2cd90ef3174503d65fe464acb2d87」}' – Looper

+0

@Looper回答我的問題或我無法幫助您。是否使用cURL登錄到您的網址? –

0

您可以隨時重寫您的代碼。

是這樣的:

$http_headers = array(
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36',); 

$crl = curl_init(); 
$url = "http://www.example.gr/node/add/content"; 
curl_setopt($crl, CURLOPT_URL, $url); 
curl_setopt($crl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); 
curl_setopt ($crl, CURLOPT_COOKIEJAR, "/tmp/cookie.txt"); 
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($crl, CURLOPT_HEADER, true); 
curl_setopt($crl, CURLOPT_HTTPHEADER, $http_headers); 
curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($crl, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($crl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36"); 
curl_setopt ($crl, CURLOPT_POSTFIELDS, $postdata); 

echo $result=curl_exec($crl); 
curl_setopt($crl, CURLOPT_POST, 1); 
$postdata = array(
    "title_field[und][0][value]"=>"category", 
    "op"=>"Save", ); 
curl_setopt ($crl, CURLOPT_POSTFIELDS, $postdata); 
echo $result=curl_exec($crl); 

很多事情可以去錯了你version.If這不起作用,重新檢查我在我的第一個前面回答寫道。

+0

我們可以通過Skype聊天嗎? – Looper

+0

@Looper這是你將要做的。1)用firefox打開目標url(不是chrome).2)按ctl + SHIFT + i 3)進入網絡選項卡4)控制檯仍然打開,自己填寫輸入點擊保存。 4)當發佈發佈請求時,你會在控制檯上看到它,選中它並轉到參數。5)檢查長字符串,可以命名爲form_id或form_token id –

+0

確定帕拉姆我檢查它相同的頭部請求希望x-csrf-token除了authication_token除了authication_token外我試圖發送它作爲郵件請求中的標題你有Skype的同樣的反應? – Looper