首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP用Fsockopen发布数据

PHP用Fsockopen发布数据
EN

Stack Overflow用户
提问于 2010-03-02 22:46:03
回答 10查看 49.5K关注 0票数 11

我试图使用fsockopen发布数据,然后返回结果。以下是我的当前代码:

代码语言:javascript
复制
<?php
$data="stuff=hoorah\r\n";
$data=urlencode($data);

$fp = fsockopen("www.website.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "POST /script.php HTTP/1.0\r\n";
    $out .= "Host: www.webste.com\r\n";
    $out .= 'Content-Type: application/x-www-form-urlencoded\r\n';
    $out .= 'Content-Length: ' . strlen($data) . '\r\n\r\n';
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?> 

它应该回显页面,它正在回显页面,但是下面是script.php的脚本

代码语言:javascript
复制
<?php
echo "<br><br>";    
$raw_data = $GLOBALS['HTTP_RAW_POST_DATA'];  
 parse_str( $raw_data, $_POST );

//test 1
var_dump($raw_data);
echo "<br><br>":
//test 2
print_r( $_POST );  
?>

其结果是:

HTTP/1.1 200确定日期: Tue,2010年3月2日22:40:46 GMT服务器: Apache/2.2.3 (CentOS) X驱动-By: PHP/5.2.6内容-长度: 31连接:关闭内容-类型: text/html;charset=UTF-8字符串(0)“Array”()

我有什么问题?为什么变量不发布它的数据?

EN

回答 10

Stack Overflow用户

发布于 2011-01-05 21:40:44

代码中有许多小错误。这是一个经过测试和工作的片段。

代码语言:javascript
复制
<?php

$fp = fsockopen('example.com', 80);

$vars = array(
    'hello' => 'world'
);
$content = http_build_query($vars);

fwrite($fp, "POST /reposter.php HTTP/1.1\r\n");
fwrite($fp, "Host: example.com\r\n");
fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fwrite($fp, "Content-Length: ".strlen($content)."\r\n");
fwrite($fp, "Connection: close\r\n");
fwrite($fp, "\r\n");

fwrite($fp, $content);

header('Content-type: text/plain');
while (!feof($fp)) {
    echo fgets($fp, 1024);
}

然后在example.com/reposter.php上

代码语言:javascript
复制
<?php print_r($_POST);

运行时,您应该得到输出,如下所示

代码语言:javascript
复制
HTTP/1.1 200 OK
Date: Wed, 05 Jan 2011 21:24:07 GMT
Server: Apache
X-Powered-By: PHP/5.2.9
Vary: Host
Content-Type: text/html
Connection: close

1f
Array
(
    [hello] => world
)
0
票数 19
EN

Stack Overflow用户

发布于 2010-03-02 23:01:31

$data从未被写入套接字。您想要添加这样的内容:

代码语言:javascript
复制
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
fwrite($fp, $data);
票数 1
EN

Stack Overflow用户

发布于 2010-03-02 23:30:55

试一试这个

代码语言:javascript
复制
$out .= 'Content-Length: ' . strlen($data) . '\r\n';
$out .= "Connection: Close\r\n\r\n";
$out .= $data;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2367458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档