php socket 发送HTTP请求 POST json
* HttpRequest.php
<?php
namespace et\http; /**
* Created by PhpStorm.
* User: mingzhanghui
* Date: 2018-09-18
* Time: 16:19
*/
class HttpRequest {
const BUFSIZE = ;
const DEFAULT_OPTIONS = [
'port' => ,
'timeout'=>
]; const DEFAULT_HEADRES = [
'Content-Type' => 'application/x-www-form-urlencoded'
]; public static function mergeDefaultOptions(Array& $to, Array $default) {
foreach ($default as $key => $value) {
if (!array_key_exists($key, $to)) {
$to[$key] = $value;
}
}
} /**
* @param $host string remote server '192.168.1.219:7102' without http://
* @param $uri string remote uri '/service/pageinfo/'
* @param $headers
* @param string $body
* @param array $options
* @return string
* @throws \Exception
*/
public static function post($host, $uri, $headers = [], $body = "", $options = []) {
self::mergeDefaultOptions($options, self::DEFAULT_OPTIONS); $socket = fsockopen($host, $options['port'], $errno, $errstr, $options['timeout']);
if (!$socket) {
throw new \Exception(sprintf("%s(%d)", $errstr, $errno));
} fwrite($socket, sprintf("POST %s HTTP/1.0\r\n", $uri));
fwrite($socket, "User-Agent: Socket_Backstage\r\n");
fwrite($socket, sprintf("Content-length: %d\r\n", strlen($body)));
fwrite($socket, "Accept: */*\r\n"); self::mergeDefaultOptions($headers, self::DEFAULT_HEADRES);
foreach ($headers as $name => $value) {
fwrite($socket, $name.": ".$value."\r\n");
}
fwrite($socket, "\r\n"); fwrite($socket, $body."\r\n");
fwrite($socket, "\r\n"); $header = "";
while ($str = trim(fgets($socket, self::BUFSIZE))) {
$header .= $str;
}
$resp = "";
while (!feof($socket)) {
$resp .= fgets($socket, self::BUFSIZE);
}
return $resp;
} public static function get($host, $uri, $data, $port=, $timeout = ) {
$socket = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$socket) {
throw new \Exception(sprintf("%s(%d)", $errstr, $errno));
}
$qs = http_build_query($data, '', '&'); fwrite($socket, sprintf("GET %s?%s HTTP/1.0\r\n", $uri, $qs));
fwrite($socket, "User-Agent: Socket_Backstage\r\n");
fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n");
fwrite($socket, sprintf("Content-length: %d\r\n", strlen($qs)));
fwrite($socket, "Accept: */*\r\n");
fwrite($socket, "\r\n");
fwrite($socket, "\r\n"); $header = "";
while ($str = trim(fgets($socket, self::BUFSIZE))) {
$header .= $str;
}
$resp = "";
while (!feof($socket)) {
$resp .= fgets($socket, self::BUFSIZE);
}
return $resp;
} /**
* $.post(url, data, function(data) { ... })
* @param $url
* @param $data
* @return mixed
* @throws \Exception
*/
public static function post_url($url, Array $data) {
$components = parse_url($url);
if ($components === false) {
throw new \Exception('url is not valid');
}
if ($components['scheme'] != 'http') {
throw new \Exception('scheme is not http');
}
$host = $components['host'];
$path = empty($components['path']) ? '/' : $components['path']; $headers = [
'Content-Type' => 'application/x-www-form-urlencoded'
];
$body = http_build_query($data, '', '&'); return self::post($host, $path, $headers, $body, self::DEFAULT_OPTIONS);
}
}
* test
index.php
<?php
/**
* Created by PhpStorm.
* User: mingzhanghui
* Date: 2018-09-18
* Time: 10:46
*/
include 'HttpRequest.php'; // $response = \et\http\HttpRequest::get('www.baidu.com', '/', []);
// $body = http_build_query($data, '', '&'); $headers = ['Content-Type' => 'application/json'];
// $body = "{\"query\":{\"bool\":{\"must\":[{\"match_phrase_prefix\":{\"request\":\"/cgi-bin/service\"}},{\"range\":{\"@timestamp\":{\"gte\":\"2017-09-11 09:26:10\",\"lte\":\"2018-09-13 09:27:10\",\"format\":\"yyyy-MM-dd HH:mm:ss\"}}},{\"range\":{\"request_time\":{\"gte\":5}}}]}},\"sort\":[{\"request_time\":{\"order\":\"desc\"}}],\"size\":10}"; function buildQueryBodySlow($uri, $begin, $end, $requestTime = , $size = ) {
$o = new \stdClass();
$o->query = new \stdClass();
$o->query->bool = new \stdClass();
$o->query->bool->must = [
=> ['match_phrase_prefix' => [
'request' => $uri
]],
=> ['range' => [
'@timestamp' => [
"gte"=> $begin,
"lte"=> $end,
"format"=> "yyyy-MM-dd HH:mm:ss"
]
]],
=> ['range' => [
'request_time' => ['gte' => $requestTime]
]]
];
$o->sort = [
=> [
'request_time'=> [
'order'=>'desc'
]
]
];
$o->size = $size; return json_encode($o);
} $body = buildQueryBodySlow(
'/cgi-bin/service',
"2017-09-11 09:26:10",
"2018-09-13 09:27:10",
, ); // post json
$response = et\http\HttpRequest::post(
'172.16.0.245',
'/filebeat-2018.09.12/_search?pretty',
$headers,
$body,
['port'=>]
); echo '<pre>';
print_r($response);
php socket 发送HTTP请求 POST json的更多相关文章
- 使用socket发送http请求(get/post)
手动发送http请求 解释说明 https://blog.csdn.net/zhangliang_571/article/details/23508953 http://www.cnblogs.com ...
- c/c++ socket发送http请求访问网站
这几天课比较少,校园网上网要认证才能上网,每次必须输入学号密码,为了方便,写了一个自动登录以及如果在线,登录自服务系统强制下线的小工具. 强制下线思路:获取sessionID----------> ...
- PHP + Socket 发送http请求进而实现站点灌水
本质上实现组装http信息的请求行,头信息.主题信息.參考it自学网 cookie信息和http请求头有非常大关系,注意把http请求头信息传递到函数里面 01-msg.php <?php re ...
- Java发送Post请求,参数JSON,接收JSON
/** * 发送post请求 * @param url 路径 * @param jsonObject 参数(json类型) * @param encoding 编码格式 * @return * @th ...
- 【C语言】Socket发送HTTP-TCP请求,数据有字符串插入
问题描述: 场景:编写Socket接口,向LOKI发送POST请求查询数据 BUG发现位置:通过cJSON读取时间戳,发现被截断. 现象:通过read()去读取返回的数据,数据行中被插入字符:如下 c ...
- JAVA发送POST请求携带JSON格式字符串参数
import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.htt ...
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
syncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主 ...
- linux c 使用socket 发送http请求 可以发送json格式数据
#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <time.h ...
- 发送Ajax请求获取JSON格式数据
Aspx前端页面: <script type="text/javascript"> $(function () { $.getJSON("Ajax/TestA ...
随机推荐
- vmstat - 报告虚拟内存的统计信息
总览 vmstat [-n] [延时[次数]] vmstat [-V] 描述 vmstat 对系统的进程情况.内存使用情况.交换页和 I/O 块使用情况.中断以及 CPU 使用情况进行统计并报告相应的 ...
- IDA静态编译之sub
int __thiscall sub_10009800(const wchar_t *this, int a2, int a3, HKEY hKey){ } 说明:__thiscall dll内子函 ...
- (PASS)java中nextInt()函数
一:获取随机数的函数: package test; import java.util.Random; /** * * @ClassName: NextIntDemo * @Description: n ...
- BeanFactory 和 ApplicationContext 区别
区别 BeanFactory: Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能 BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean ...
- Unity 中调用Android的JAVA代码
首先我们要创建一个android项目 因为项目需要使用Unity提供的接口,所以需要将接口classes.jar引入至当前工程但中.接口包的所在地,打开Finder->应用程序->Unit ...
- ruby on rails笔记
一.新建rails项目步骤: 1.生成新项目 rails new demo cd demo vi Gemfile 末尾end前增加 gem 'execjs' gem 'therubyracer ...
- eclipse如何实现智能提示功能
一直时候用idea很久没有使用eclipse了,idead的ctrl+鼠标滚轮是可以调节字体大小,这项功能是我的最爱. 早就忘记eclipse的智能助手设置,今天翻下以前的笔记,觉得还是做个博客方便今 ...
- POJ3241 最小曼哈顿距离生成树 - 真有趣哇
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. 给你n个坐标, ...
- opencv-霍夫直线变换与圆变换
转自:https://blog.csdn.net/poem_qianmo/article/details/26977557 一.引言 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信 ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate 1.返回顶部 1. templateMessage.deleteTemplate ...