php 构造post,PHP构造GET/POST请求的几种方法

方法一:

利用php的socket,参考用法如下:

function http_request(

$verb = 'GET',             /* HTTP Request Method (GET and POST supported) */

$ip,                       /* Target IP/Hostname */

$port = 80,                /* Target TCP port */

$uri = '/',                /* Target URI */

$getdata = array(),        /* HTTP GET Data ie. array('var1' => 'val1', 'var2' => 'val2') */

$postdata = array(),       /* HTTP POST Data ie. array('var1' => 'val1', 'var2' => 'val2') */

$cookie = array(),         /* HTTP Cookie Data ie. array('var1' => 'val1', 'var2' => 'val2') */

$custom_headers = array(), /* Custom HTTP headers ie. array('Referer: http://localhost/ */

$timeout = 1,           /* Socket timeout in seconds */

$req_hdr = false,          /* Include HTTP request headers */

$res_hdr = false           /* Include HTTP response headers */

)

{

$ret = '';

$verb = strtoupper($verb);

$cookie_str = '';

$getdata_str = count($getdata) ? '?' : '';

$postdata_str = '';

foreach ($getdata as $k => $v)

$getdata_str .= urlencode($k) .'='. urlencode($v) . '&';

foreach ($postdata as $k => $v)

$postdata_str .= urlencode($k) .'='. urlencode($v) .'&';

foreach ($cookie as $k => $v)

$cookie_str .= urlencode($k) .'='. urlencode($v) .'; ';

$crlf = "\r\n";

$req = $verb .' '. $uri . $getdata_str .' HTTP/1.1' . $crlf;

$req .= 'Host: '. $ip . $crlf;

$req .= 'User-Agent: Mozilla/5.0 Firefox/3.6.12' . $crlf;

$req .= 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' . $crlf;

$req .= 'Accept-Language: en-us,en;q=0.5' . $crlf;

$req .= 'Accept-Encoding: deflate' . $crlf;

$req .= 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' . $crlf;

foreach ($custom_headers as $k => $v)

$req .= $k .': '. $v . $crlf;

if (!empty($cookie_str))

$req .= 'Cookie: '. substr($cookie_str, 0, -2) . $crlf;

if ($verb == 'POST' && !empty($postdata_str))

{

$postdata_str = substr($postdata_str, 0, -1);

$req .= 'Content-Type: application/x-www-form-urlencoded' . $crlf;

$req .= 'Content-Length: '. strlen($postdata_str) . $crlf . $crlf;

$req .= $postdata_str;

}

else $req .= $crlf;

if ($req_hdr)

$ret .= $req;

if (($fp = @fsockopen($ip, $port, $errno, $errstr)) == false)

return "Error $errno: $errstr\n";

stream_set_timeout($fp, 0, $timeout * 1000);

fputs($fp, $req);

while ($line = fgets($fp)) $ret .= $line;

fclose($fp);

if (!$res_hdr)

$ret = substr($ret, strpos($ret, "\r\n\r\n") + 4);

return $ret;

}

http_request('GET', '192.168.1.107', 86, '/ning.php',array('get1' => 'v_get1'));

?>

方法二:

利用php的curl扩展,参考用法如下:

$ch = curl_init();

$str ='http://192.168.1.107:86/ning.php?cid=2a';

curl_setopt($ch, CURLOPT_URL, $str);

curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );

curl_exec($ch);

curl_close($ch);

?>

方法三:

利用第三方类库,例如HttpClient.class.php可到http://scripts.incutio.com/httpclient/下载,参考用法如下:

require 'HttpClient.class.php';

$httpClient = new HttpClient('http://192.168.1.107','8081');

$params = array('cid'=>'测试httpClient');

$httpClient->quickPost('http://192.168.1.107:8081/ning.php', $params);

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值