如何将POST数据设置为URL并在字符串变量中获取结果
我正在尝试获取POST结果,但服务器已将其阻止。 我试过了如何将POST数据设置为URL并在字符串变量中获取结果,url,post,Url,Post,我正在尝试获取POST结果,但服务器已将其阻止。 我试过了 fsockopen 卷曲 文件\u获取\u内容 但我从服务器上得到的结果与“拒绝访问”的消息相同 是否有任何方法可以从块服务器获取POST结果 <?php $post_arr = array ("regno" => "1"); $addr = 'url'; $fp = fsockopen($addr, 80, $errno, $errstr, 30); if (!$fp) {
- fsockopen
- 卷曲
- 文件\u获取\u内容
<?php
$post_arr = array ("regno" => "1");
$addr = 'url';
$fp = fsockopen($addr, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$req = '';
foreach ($post_arr as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&" . $key . "=" . $value;
}
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
fwrite($fp, $header);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
而且
<?php
$postdata = http_build_query(
array(
'regno' => 1
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('url', false, $context);
echo $result;
?>
上述两种方法都给我一个拒绝访问的输出。尝试设置HTTP\u REFERER变量
'header' => "Content-type: application/x-www-form-urlencoded\r\nReferer: http://urltopost\r\n",
如果这不起作用,试着模仿更多的标题。这是我从Chrome Developer Tools的网络选项卡上看到的:
POST /hse/result.asp HTTP/1.1
Host: urlhost
Connection: keep-alive
Content-Length: 17
Cache-Control: max-age=0
Origin: url
User-Agent: something
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: url
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: ASPSESSIONIDASRCTADA=FBHLDODAOCBACEKMNFLJIMGO
编辑以包含工作代码:
如果用这个替换第二个代码段中的$opts定义,它将起作用。它对我有用
$opts = array('http' =>
array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n"
."Referer: url\r\n",
'content' => $postdata
)
);
完整代码:
<?php
$postdata = http_build_query( array( 'regno' => 1 ) );
$opts = array('http' => array( 'method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n" ."Referer: urltopost\r\n", 'content' => $postdata ) );
$context = stream_context_create($opts);
$result = file_get_contents('urltopost', false, $context);
echo $result;
?>
拒绝访问即拒绝访问。如果服务器不让你进去,你就不能进去。是什么让你认为你可以在你的终端做antyhign来绕过服务器的锁定?如果保安拒绝你进入银行金库,改变你衬衫的颜色并不能改变你不能进入金库的事实。这是手动操作吗?如果是这样,您希望使用Chrome开发者工具或Firebug查看发送的请求头,然后使用cURL来模拟这些头。感谢Ansari的回复。我也尝试过更改“标题”,但我得到了相同的结果:拒绝访问。我对编程也很陌生。请引导我。谢谢你,谢谢你的贡献。但它不起作用。我也改变了$opts的定义。我不知道该说什么-我只是再次检查,复制了您的初始代码,替换为我的部分,它对我有效。我得到了regno=1的结果。重新。刚才粘贴的代码,results.asp后面有一个分号,不应该在那里。我现在把完整的代码放在我的答案中。将其保存到新文件并运行它。它应该会起作用。如果不是,你的服务器配置还有其他问题。在这种情况下,我不知道-可能他们阻止了你的IP或域或其他东西。您可以尝试在本地计算机上设置Web服务器,或者尝试从其他域设置Web服务器吗?