socket 发送发送HTTP请求
socket方式:
- $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
- //socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec"=>20, "usec"=>0));
- socket_connect($socket, 'www.baidu.com', 80);
- //里面的换行代表 \r\n 注意拷贝的代码后面可能有空格
- $http = <<<eof
- GET / HTTP/1.0
- Accept: */*
- User-Agent: Lowell-Agent
- Host: www.baidu.com
- Connection: Close
- eof;
- socket_write($socket, $http, strlen($http));
- while($str = socket_read($socket, 1024))
- {
- echo $str;
- }
- socket_close($socket);
fsockopen方式:
- $fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30);
- if (!$fp) {
- echo "$errstr ($errno)<br />\n";
- } else {
- $out = "GET / HTTP/1.1\r\n";
- $out .= "Host: www.baidu.com\r\n";
- $out .= "Connection: Close\r\n\r\n";
- fwrite($fp, $http);
- while (!feof($fp)) {
- echo fgets($fp, 128);
- }
- fclose($fp);
- }
原始socket方式:
- $fp = stream_socket_client("tcp://www.baidu.com:80", $errno, $errstr, 30);
- if (!$fp) {
- echo "$errstr ($errno)<br />\n";
- } else {
- $http = <<<eof
- GET / HTTP/1.0
- Accept: */*
- User-Agent: Lowell-Agent
- Host: www.baidu.com
- Connection: Close
- eof;
- fwrite($fp, $http);
- while (!feof($fp)) {
- echo fgets($fp, 1024);
- }
- fclose($fp);
- }
stream 方式(get):
- $http = <<<eof
- Host: www.baidu.com
- User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
- Cookie: BAIDUID=79D98B1AD8436C57B967E111E484F1CD:FG=1; BDUSS=lF-UFFOanFPVG92NmF4U3NiTEoxOFh4YVBCTnZaMUtoTUNhZmxrWThwN25IaUJVQVFBQUFBJCQAAAAAAAAAAAEAAADzo1gKc2lxaW5pYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeR-FPnkfhTU; BAIDUPSID=79D98B1AD8436C57B967E111E484F1CD; BD_UPN=13314352; BD_HOME=1; H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618; sug=3; sugstore=0; ORIGIN=2; bdime=0
- Connection: keep-alive
- Cache-Control: max-age=0
- eof;
- $hdrs = array(
- 'http' =>array(
- 'header' => $http,
- 'timeout'=>1, //超时 秒
- 'method' => 'GET', //默认方式
'protocol_version' => '1.1', //默认为 1.0- ),
- );
- //参数格式参考 http://php.net/manual/zh/context.http.php
- //curl方式的格式可以参考; http://php.net/manual/zh/context.curl.php
- $context = stream_context_create($hdrs);
- echo file_get_contents('http://www.baidu.com', 0, $context);
stream 方式 post:
- $postdata = http_build_query(array('act'=>'save', 'id'=>387171));
- $http = <<<eof
- Host: www.baidu.com
- User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
- Content-Type: application/x-www-form-urlencoded; charset=UTF-8
- Cookie: BAIDUID=79D98B1AD8436C57B967E111E484F1CD:FG=1; BDUSS=lF-UFFOanFPVG92NmF4U3NiTEoxOFh4YVBCTnZaMUtoTUNhZmxrWThwN25IaUJVQVFBQUFBJCQAAAAAAAAAAAEAAADzo1gKc2lxaW5pYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeR-FPnkfhTU; BAIDUPSID=79D98B1AD8436C57B967E111E484F1CD; BD_UPN=13314352; BD_HOME=1; H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618; sug=3; sugstore=0; ORIGIN=2; bdime=0
- Connection: keep-alive
- Cache-Control: max-age=0
- eof;
- #注意post方式需要增加Content-Type
- $hdrs = array(
- 'http' =>array(
- 'header' => $http,
- 'timeout'=>1, //超时 秒
- 'method' => 'POST',
- 'content' => $postdata,
'protocol_version' => '1.1', //默认为 1.0- ),
- );
- //参数格式参考 http://php.net/manual/zh/context.http.php
- //curl方式的格式可以参考; http://php.net/manual/zh/context.curl.php
- $context = stream_context_create($hdrs);
- echo file_get_contents('http://test.cm/song.php', 0, $context);
注意:http1.1 中必须包含 Host 头, 而 http1.0中则可以没有
HTTP超文本传输协议-HTTP/1.1中文版
socket 发送发送HTTP请求的更多相关文章
- C# Socket模拟发送接收
Socket简介 通过TCP/IP与仪器或设备通讯,在C#语言中,我们通常采用Socket.本项目是一个简单的Socket建立服务监听与Socket作为客户端请求的一个示例. 项目结构 客户端项目 S ...
- [NIO]用dawn发送接收HTTP请求
HTTP协议的下层使用的是tcp.所以我们建立一个tcp连接就能发送接收http请求.dawn底层使用了nio.可是经过dawn的封装之后,我们在编写代码的时候,就和使用普通的堵塞式socket一样 ...
- socket 异步 发送 接收 数据
Socket socketClints = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); / ...
- HttpUtil工具类,发送Get/Post请求,支持Http和Https协议
HttpUtil工具类,发送Get/Post请求,支持Http和Https协议 使用用Httpclient封装的HttpUtil工具类,发送Get/Post请求 1. maven引入httpclien ...
- 如果调用ASP.NET Web API不能发送PUT/DELETE请求怎么办?
理想的RESTful Web API采用面向资源的架构,并使用请求的HTTP方法表示针对目标资源的操作类型.但是理想和现实是有距离的,虽然HTTP协议提供了一系列原生的HTTP方法,但是在具体的网络环 ...
- 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案
第一次调用webapi出错如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// ...
- ZeroMQ接口函数之 :zmq_send – 在一个socket上发送一个消息帧
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-send zmq_send(3) ØMQ Manual - ØMQ/4.1.0 Name ...
- ZeroMQ接口函数之 :zmq_sendmsg – 从一个socket上发送一个消息帧
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-sendmsg zmq_sendmsg(3) ØMQ Manual - ØMQ/4.1.0 Name ...
- ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
- 从零开始学习Node.js例子七 发送HTTP客户端请求并显示响应结果
wget.js:发送HTTP客户端请求并显示响应的各种结果 options对象描述了将要发出的请求.data事件在数据到达时被触发,error事件在发生错误时被触发.HTTP请求中的数据格式通过MIM ...
随机推荐
- python study - 正则表达式
第 7 章 正则表达式 7.1. 概览 7.2. 个案研究:街道地址 7.3. 个案研究:罗马字母 7.3.1. 校验千位数 7.3.2. 校验百位数 7.4. 使用 {n,m} 语法 7.4.1. ...
- Foundation框架 - 快速创建跨平台的网站页面原型
API参考:http://foundation.zurb.com/docs/ 作为网页设计和开发人员,我们面临着以下几个严峻的问题: 每天,人们用来上网的设备种类和数量都在不断上升. 为每种设备设计开 ...
- Android TextView换行问题
本文转载于:http://niufc.iteye.com/blog/1729792 ndroid的TextView在显示文字的时候有个问题就是一行还没显示满就跳到下一行,原因是: 1) TextVie ...
- 【转】iOS 删除已经配置的类库和移除CocoaPods
原文网址:http://www.jianshu.com/p/552f21a989ba 引言 我们使用CocoaPods非常高效地将一些第三方类库导入到我们的项目中,但是不由得产生一个疑问:如果发现某个 ...
- Win7+VS2010环境下CEGUI 0.8.4编译过程详解
转载▼ 1. 在http://cegui.org.uk/download 下载CEGUI源码包 cegui-0.8.4 以及CEGUI依赖库(Windows / Apple OS X only) ...
- gcviewer待整理
官网:https://github.com/chewiebug/GCViewer G1 Gabage Collector -XX:+UnlockExperimentalVMOptions -XX:+U ...
- android向web提交参数的4种方式总结,附带网站案例源码
第一种:基于http协议通过get方式提交参数 1.对多个参数的封装 public static String get_save(String name, String phone) { /** * ...
- jquery layer弹窗弹层插件 小巧强大
/* 先去官网下载最新的js http://sentsin.com/jquery/layer/ ①引用jquery ②引用layer.min.js */ 触发弹层的事件可自由绑定,如: $('#id ...
- php 数组排序 sort asort ksort
<?php $arr = array('d'=>'sdf', 'r'=>'sdf', 'a'=> 'eee'); //sort($arr); // 对数组的值进行重排, 删除之 ...
- 通过命令行安装Android app
手动安装安卓app的命令为:adb install -r C:\Users\Lihao\workspace\Appium_Demo\apps\app_F_1.3.0.apk