Php HEAD请求问题的解决方案

Php HEAD请求问题的解决方案,php,curl,Php,Curl,我一直在编写一个脚本,将客户数据发送到拨号服务器。不久前我发布了一个类似的问题,但最终得到了一些回复。然而,我面临着另一个问题 当我从本地主机服务器测试脚本时,数据被成功发送,我得到一个200OK http响应。在我的本地主机服务器上,当我检查curl\u信息的详细信息时,request\u头显示已经使用了POST 当我在另一台服务器上测试相同的脚本时,不会返回任何响应。然而,HTTP_代码确实显示401,表明存在安全和授权问题。然而,请求_头是HEAD 现在有谁能帮我弄清楚为什么请求_头之间存

我一直在编写一个脚本,将客户数据发送到拨号服务器。不久前我发布了一个类似的问题,但最终得到了一些回复。然而,我面临着另一个问题

当我从本地主机服务器测试脚本时,数据被成功发送,我得到一个200OK http响应。在我的本地主机服务器上,当我检查curl\u信息的详细信息时,request\u头显示已经使用了POST

当我在另一台服务器上测试相同的脚本时,不会返回任何响应。然而,HTTP_代码确实显示401,表明存在安全和授权问题。然而,请求_头是HEAD

现在有谁能帮我弄清楚为什么请求_头之间存在如此大的差异,以及是否有办法强制秒服务器使用POST。因为我感觉这个服务器在HEAD请求方面有问题

这是我正在使用的脚本:

$full_url = $_GET['url'] . urlencode($_GET['attrib']);

$loginUsername = "123456";
$loginPassword = "123456";

$unencriptedString = $loginUsername.":".$loginPassword;
$encryptedString = base64_encode($unencriptedString);


$headers         =    array("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                        "Accept-Language: en-gb",
                        "Accept-Encoding: gzip,deflate",
                        "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",
                        "Keep-Alive: 300",
                        "Connection: keep-alive",
                        "Content-type: application/x-www-form-urlencoded;charset=UTF-8",
                        "Content-length: " . strlen($_GET['attrib']),
                        "Transfer-Encoding: chunked",
                        $_GET['attrib'],
                        );

$user_agent       = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5)";                             
$ch = curl_init();
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );    # required for https urls
curl_setopt( $ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt( $ch, CURLOPT_URL, $_GET['url']);
curl_setopt( $ch, CURLOPT_USERPWD, "$loginUsername:$loginPassword"); //login
curl_setopt( $ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt( $ch, CURLOPT_POST, 1); 
curl_setopt( $ch, CURLOPT_POSTFIELDS, $_GET['attrib']);
curl_setopt( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
// curl_setopt( $ch, CURLOPT_TIMEOUT, 10);
curl_setopt( $ch, CURLINFO_HEADER_OUT, 1);
curl_setopt( $ch, CURLOPT_VERBOSE, 1);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER,1);

$response = curl_exec($ch);  
if (!$response) {  
   $response = curl_error($ch);  
}
echo "<p>" . $response . "</p>"; 

$info = curl_getinfo($ch);

if (curl_error($ch)) {
   echo "ERROR ". curl_error($ch) ."\n<br/>";
} else {
   print "<pre>";
   print_r($info);
   print "</pre>";
}

echo "<p>&nbsp;</p>";   

var_dump($headers);

curl_close($ch);
$full\u url=$\u GET['url']。urlencode($_GET['attrib']);
$loginUsername=“123456”;
$loginPassword=“123456”;
$UnscriptedString=$loginUsername.:“$loginPassword;
$encryptedString=base64_encode($unscriptedstring);
$headers=array(“接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”,
“接受语言:en gb”,
“接受编码:gzip,deflate”,
“接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7”,
“保持活力:300”,
“连接:保持活动状态”,
“内容类型:application/x-www-form-urlencoded;charset=UTF-8”,
“内容长度:”.strlen($\u GET['attrib']),
“传输编码:分块”,
$\u获取['attrib'],
);
$user_agent=“Mozilla/5.0(Windows;U;Windows NT 6.0;en-US;rv:1.9.1.5)”;
$ch=curl_init();
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);#https URL是必需的
curl_setopt($ch,CURLOPT_USERAGENT,$user_agent);
curl_setopt($ch,CURLOPT_URL,$_GET['URL']);
curl_setopt($ch,CURLOPT_USERPWD,“$loginUsername:$loginPassword”)//登录
curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
卷曲设置($ch,卷曲设置桩,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$_GET['attrib']);
curl_setopt($ch,CURLOPT_HTTP_VERSION,curl_HTTP_VERSION_1_1);
//curl_setopt($ch,CURLOPT_超时,10);
curl_setopt($ch,CURLINFO_HEADER_OUT,1);
curl_setopt($ch,CURLOPT_VERBOSE,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$response=curl\u exec($ch);
如果(!$response){
$response=curl\u错误($ch);
}
回声“”$答复。“

”; $info=curl\u getinfo($ch); if(旋度误差($ch)){ echo“ERROR”。curl_ERROR($ch)。“\n
”; }否则{ 打印“”; 打印(信息); 打印“”; } 回声“

”; 变量转储($headers); 卷曲关闭($ch);
谢谢


詹姆斯

我会尝试使用这个选项
curl\u setopt($ch,CURLOPT\u SSL\u VERIFYHOST,0)



作为一个解决方案,您可以考虑使用“代码> CurLopttCuppRebug < /Cord>选项”。

头请求通常是代理或缓存检查的结果,如果在发布GET刷新内容之前缓存内容仍然有效吗?在客户端和服务器之间是否有代理或缓存?我不希望在发布之前使用它,因为它没有任何意义

我会尝试使用Wireshark或类似工具精确跟踪请求和响应的顺序以及它们的来源

另一个Altgenerative是一个简单的代理,用于转储HTTP流量,Google的第一个结果是这个(我自己没有使用):

我相信您得到的是“HEAD已使用”,因为您在GET/POST之前发送HEAD。因此,由于您获得了401,POST/GET甚至从未经过协商。如果是这样的话,一旦你解决了你的授权问题,你就可以开始了。只是一种预感。奇怪的是,我用这个脚本在本地服务器上没有任何问题,但在其他地方,有一个大问题。。