* 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. java访问https绕过证书信任

    package com.xing.test; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  2. android是32-bit系统还是64-bit系统

    转自:http://www.cnblogs.com/pengwang/archive/2013/03/11/2954496.html 电脑CPU分32位和64位,这个我们都知道.用了这么长时间的and ...

  3. Mysql 查询表中某字段的重复值,删除重复值保留id最小的数据

    1 查询重复值 ); 2 删除重复值 -- 创建临时表 ) ); -- 把重复数据放进临时表 INSERT Hb_Student_a SELECT id,studentNumber FROM Hb_S ...

  4. Peasy.NET学习之并发问题处理

    Peasy.net之并发处理 BusinessServiceBase是ServiceBase的自定义实现,提供了额外的独特功能 首先,创建一个业务服务,该业务服务必须继承BusinessService ...

  5. Saks就const解释

    In my last column, I discussed one of the reasons why the rules by which a compiler can place data i ...

  6. [JZOJ 5810] 简单的玄学

    思路: 就是考虑一个结论 对于\(1<=x<=2^n\),那么\(x\)与\(2^n - x\)中的2的个数相等. 证明: 我们将\(x\)表示成\(2^k*b\),那么\(2^n - x ...

  7. Windows内存管理(1)--分配内核内存 和 使用链表

    1.      分配内核内存 Windows驱动程序使用的内存资源非常珍贵,分配内存时要尽量节约.和应用程序一样,局部变量是存放在栈空间中的.但栈空间不会像应用程序那么大,所以驱动程序不适合递归调用或 ...

  8. vs2013代码高亮显示失效

    问题: 最近使用vs2013写代码的时候经常遇到一种问题,当我们的工程逐渐变大时,突然有一个文件出现以上问题,这并不是设置提示的问题,因为当你打开别的工程时该问题不会出现.这其实是配置缓存的问题,而V ...

  9. hexo next修改代码区主题,修改字体样式,大小

    文章目录 广告 修改代码区主题 站点_config.yml 主题_config.yml 修改字体样式,大小 ps 我自己的方式 广告 本人博客地址:https://mmmmmm.me 源码:https ...

  10. Codeforces 1176A Divide it!

    题目链接:http://codeforces.com/problemset/problem/1176/A 思路:贪心,对第二个操作进行俩次等于将n变成n/3,第三个操作同理,我们将n不断除以2,再除以 ...