2017-09-02 49 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