在向服务器提交帖子字符串时,我一直收到<h1>Length required</h1>
错误。
$cookie = "Secret cookie data here";
$searchData = array(
'__EVENTTARGET' => 'ctl00$main$btn',
'ctl00$main$tbMNr' => $_GET['smth'],
'ctl00$main$tbMb' => $_GET['smthElse'],
'__VIEWSTATE' => 'smthElseHere'
);
// Commenting this out, as suggested by user lonesomeday
//foreach ($searchData as &$elem) // This should not be necessary
// $elem = urlencode($elem);
// create a new cURL resource
$fields = http_build_query($searchData); // Assuming it's an array
if ($ch = curl_init("http://mysite.com"))
{
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true); // Suggestion from Berry Langerak - no difference, same error
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
}
$result = curl_exec($ch);
if ($result === false) {
echo 'Curl error: ' . curl_error($ch);
}
echo "<pre>".$fields."</pre>".$result; // For debugging ONLY
curl_close($ch);
如果我发表评论CURLOPT_POSTFIELDS
和CURLOPT_POST
,一切都很好。
有什么建议吗?
修改
当我添加此行
时curl_setopt($ch, CURLOPT_HEADER, array('Content-Type:application/x-www-form-urlencoded'));
我在Length Required
HTTP / 1.1 411所需长度内容类型:text / html日期:星期一,2011年5月16日10:20:54 GMT连接:关闭内容长度:24
答案 0 :(得分:5)
你的用法完全混淆了。
请勿自行更改Content-Length,但请让libcurl执行此操作以使其正确无误。
您是打算执行multipart formpost(将哈希数组传递给POSTFIELDS选项)还是“常规”传递(将字符串传递给POSTFIELDS选项)?接收者很可能会假设其中一个,你不能随便随意选择一种类型。
如果你有正确的POST,并且你知道你正确地发送了数据(根据记录的浏览器使用验证),那么你可以看到服务器说的是什么,是否仍然坚持如果你错了,那么你回顾一下录制的会话并调整你的请求就更加相似了。冲洗并重复直至其起作用。
答案 1 :(得分:4)
只是想为来这里有相同症状的人添加:
如果您要发布到IIS 6并且没有任何内容,您仍然需要发送Content-Length:0或者它会抱怨“需要长度”。
答案 2 :(得分:3)
Ehrm,我没有看到你告诉cURL你的意图是做一个POST请求。添加以下选项:
curl_setopt($ch, CURLOPT_POST, true);
这可能会解决问题。
答案 3 :(得分:1)
编辑:您是否也尝试删除&amp;放大器; ?
http_build_query($array, '', '&');
=============
您是否尝试发表评论
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
您的Cookie数据是否有效?
尝试将代理人放入:
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
设置推荐人:
curl_setopt($ ch,CURLOPT_REFERER,$ url);
答案 4 :(得分:0)
$query ="email=".urlencode($usernames[$key]."@sktechno.net")."&firstName=".urlencode($usernames[$key])."&lastName=".urlencode($lastnames[$key]);
$headerX = array(
'ISV_API_KEY: f6c1c52d03f49c9b4f94150256f2f0dcec6ada1d175d06e990e2d692f443a2db',
'ISV_API_SECRET: 8ae599feda50db968cf4b536e7d79e4ad2d6bd60f41715336b73002819795cc0'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerX);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);