* 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的更多相关文章

  1. 使用socket发送http请求(get/post)

    手动发送http请求 解释说明 https://blog.csdn.net/zhangliang_571/article/details/23508953 http://www.cnblogs.com ...

  2. c/c++ socket发送http请求访问网站

    这几天课比较少,校园网上网要认证才能上网,每次必须输入学号密码,为了方便,写了一个自动登录以及如果在线,登录自服务系统强制下线的小工具. 强制下线思路:获取sessionID----------> ...

  3. PHP + Socket 发送http请求进而实现站点灌水

    本质上实现组装http信息的请求行,头信息.主题信息.參考it自学网 cookie信息和http请求头有非常大关系,注意把http请求头信息传递到函数里面 01-msg.php <?php re ...

  4. Java发送Post请求,参数JSON,接收JSON

    /** * 发送post请求 * @param url 路径 * @param jsonObject 参数(json类型) * @param encoding 编码格式 * @return * @th ...

  5. 【C语言】Socket发送HTTP-TCP请求,数据有字符串插入

    问题描述: 场景:编写Socket接口,向LOKI发送POST请求查询数据 BUG发现位置:通过cJSON读取时间戳,发现被截断. 现象:通过read()去读取返回的数据,数据行中被插入字符:如下 c ...

  6. JAVA发送POST请求携带JSON格式字符串参数

    import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.htt ...

  7. Android Studio利用异步任务AsyncTask发送post请求获取json数据

    syncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主 ...

  8. linux c 使用socket 发送http请求 可以发送json格式数据

    #include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <time.h ...

  9. 发送Ajax请求获取JSON格式数据

    Aspx前端页面: <script type="text/javascript"> $(function () { $.getJSON("Ajax/TestA ...

随机推荐

  1. 基于LNMP架构部署wordpress

    [root@localhost ~]# yum -y install unzip[root@localhost ~]# unzip wordpress-5.2.3.zip[root@localhost ...

  2. 日文NLP分词系统

    mecab(http://mecab.sourceforge.net/)是奈良先端科技大学开发的日文分词系统,基于CRF的分词原理,有c++实现,提供python.perl.ruby等接口 日文NLP ...

  3. DOM——属性操作

    属性操作 非表单元素的属性 href.title.id.src.className  var link = document.getElementById('link'); console.log(l ...

  4. CSS——背景及应用

    CSS 可以添加背景颜色和背景图片,以及进行图片设置. none : 无背景图(默认的) url : 使用绝对或相对地址指定背景图像 background-image 属性允许指定一个图片展示在背景中 ...

  5. HTML+CSS项目——模拟京东网页

    项目准备 项目名称:京东商城 项目描述:京东首页公共部分的头部和尾部制作,京东首页中间部分. 设计目标 保证浏览器 ie7及以上, 火狐, 360, safari,chrome等.谁让我再测ie6,就 ...

  6. php注册 及审核练习

    1.注册界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  7. NTT数论变换

    数论变换NTT 前置知识 FFT:NTT的思想和FFT一样(FFT介绍) 概述 数论变换,即NTT(Number Theory Transformation?),是基于数论域的FFT,一般我们默认FF ...

  8. NX二次开发-uc1600字符串对话框

    NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); char* cue = "输入框&quo ...

  9. [NOI.AC] candy

    题意:求净利益. 思路: 其实我也不怎么懂题面. 不过这种题一般来说就是从最大的开始选. 所以考虑贪心. 那么代价如何处理呢?? 我们考虑两个序列同时选数,把代价每次记录到一个序列的和上,那么对于两次 ...

  10. mysql数据库分页查询优化

    原博:MySQL单表百万数据记录分页性能优化 limit优化 当数据很多需要进行分页查询时:需要先查出第一条数据的id然后根据id查询大于id的数据 limt 一页的数据量 1.   直接用limit ...