* 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. 前端之script标签注意事项

    在一对script 标签中一旦有错误,其后续的代码都不会执行 一对script标签有问题,不会影响其他script标签代码的执行 当一对script标签的作用是引入外部的js文件的时候,就不要在其内部 ...

  2. Batch - %~dp0 modifiers

    %~dp0 简易解释 The variable %0 in a batch script is set to the name of the executing batch file. The ~dp ...

  3. delphi获得文件大小

    大概有这些方法可以获得文件大小 FileSizeByName(需要引用IdGlobal单元) GetFileSize FileSize(不能获得正在使用的文件大小) FileSeek TFileStr ...

  4. JavaScript做个时间表 Date()

    <span id="shiji"></span><script> window.setInterval("time()",5 ...

  5. Django 查漏补缺

    Django 查漏补缺 Django  内容回顾: 一. Http 请求本质: 网络传输,运用socket Django程序: socket 服务端 a. 服务端监听IP和端口 b. 浏览器发送请求 ...

  6. Delphi中任务栏状态区的编程

    在Windows桌面的任务栏上有一个凹陷的区域,其中显示着系统时钟以及一些图标,这个长方形的区域便是Windows的任务栏状态区(taskbar status area).本文将介绍使用Borland ...

  7. python中os模块获取路径的几种方式

    一.代码 import os BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) p ...

  8. NX二次开发-UFUN链表UF_MODL_create_list等用法

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_curve.h> #include < ...

  9. C#-Api:身份证识别

    ylbtech-C#-Api:身份证识别 通过POST上传base64格式的图片内容,可识别二代身份证.驾照.行驶证.军官证.中华人民共和国往来港澳通行证.台湾居民往来大陆通行证.大陆居民往来台湾通行 ...

  10. C++ 编译过程简介

    C/C++程序编译流程: 预处理->编译->汇编->链接 具体的就是: 源代码(source coprede)→预处理器(processor)→编译器(compiler)→汇编程序( ...