Giter Club home page Giter Club logo

http-client's People

Contributors

jbkingsley avatar jimraynor avatar roiwk avatar twomiao avatar walkor avatar youfeed avatar zhanguangcheng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

http-client's Issues

Response body is always empty

workerman/http-client/src/Request.php:321

    $this->_response = new Response(
        $parts[1],
        $response_data['headers'],
        '',
        explode('/', $parts[0])[1],
        isset($parts[2]) ? $parts[2] : null
    );

error get font file

i'm using curl with workerman, it works fine, but i want to switch to async
I converted to this library, it works fine with html and css content, but when it encounters .woff and .ttf font files it gives an error

web_1    | Error: Call to a member function destroy() on null in /var/www/html/vendor/workerman/http-client/src/Request.php:453
web_1    | Stack trace:
web_1    | #0 /var/www/html/vendor/workerman/http-client/src/Request.php(379): Workerman\Http\Request->emitError()
web_1    | #1 /var/www/html/vendor/workerman/workerman/Connection/TcpConnection.php(660): Workerman\Http\Request->handleData()
web_1    | #2 [internal function]: Workerman\Connection\TcpConnection->baseRead()
web_1    | #3 /var/www/html/vendor/workerman/workerman/Events/Event.php(195): EventBase->loop()
web_1    | #4 /var/www/html/vendor/workerman/workerman/Worker.php(2430): Workerman\Events\Event->loop()
web_1    | #5 /var/www/html/vendor/workerman/workerman/Worker.php(1554): Workerman\Worker->run()
web_1    | #6 /var/www/html/vendor/workerman/workerman/Worker.php(1384): Workerman\Worker::forkOneWorkerForLinux()
web_1    | #7 /var/www/html/vendor/workerman/workerman/Worker.php(1358): Workerman\Worker::forkWorkersForLinux()
web_1    | #8 /var/www/html/vendor/workerman/workerman/Worker.php(1691): Workerman\Worker::forkWorkers()
web_1    | #9 /var/www/html/vendor/workerman/workerman/Worker.php(1640): Workerman\Worker::monitorWorkersForLinux()
web_1    | #10 /var/www/html/vendor/workerman/workerman/Worker.php(544): Workerman\Worker::monitorWorkers()
web_1    | #11 /var/www/html/index.php(174): Workerman\Worker::runAll()
web_1    | #12 {main}

Basic auth

Is that any ways to add the basic auth for the request?

SSL Verification

When access to https I got error message :
SSL handshake error: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

How to skip SSL verification ?

thx

Does it support proxy?

I need to connect through http proxy, how can I use it.
Is there a curl-like implementation?
I tried setting up the environment proxy on the system. But the connection still doesn't go through the proxy

可以升级了

跟有的框架不兼容了
guzzle/psr 2.x的 "psr/http-message": "^1.1 || ^2.0"
workerman/psr 的 "psr/http-message": "~1.0"

Using http-client with Workerman HTTP server

Hi @walkor

How to make the HTTP response of Workerman HTTP server waits from the HTTP client to finish first? 🤔

<?php

use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker('http://127.0.0.1:2345');
$http_client = new Workerman\Http\Client();
$http_worker->count = 1;

$http_worker->onMessage = function ($connection, $request) use ($http_client) {
    $http_client->request('https://ifconfig.me/ip', [
        'method' => 'GET',
        'version' => '1.1',
        'success' => function ($response) use ($connection) {
            echo $response->getBody() . "\n";
        },
        'error' => function ($exception) {
            echo $exception;
        }
    ]);
    $connection->send(""); // need to use $response->getBody() here
};

Worker::runAll();

Connection closed

I decided use http client in my worker.
Server part works on workerman Worker with one thread ( $worker->count = 1; ) Business logic requires it.

Part of http client here :

$http = new Workerman\Http\Client(
['max_conn_per_addr' => 128,
  'keepalive_timeout' => 15,
   'connect_timeout'   => 30,
   'timeout'           => 30,
]);
$t=microtime(1);
$http->post('http://127.0.0.1:8080', ['command'=>'ping'], 
function ($response) { echo "ok\n"; }, 
function ($exception) use($t){ echo ' exception ['.substr($exception,0,57).']</b> diff:'.(microtime(1)-$t).s"\n"; }
);

So, when i post queries sequentially all work fine and quick. But if i send multiple quries - http client very quickly (0.1sec) recieve exception "Connection closed". I was expect that it will wait answer from server up to 30 seconds, but not.
If I use another asynchronous method of client operation via curl_multi I don’t observe such server behavior.
May be i need some tune of psr7 ? Or do you have any smart thoughts on this topic?

Thank you for your product and attention to it.

获取https内容报错

是不是还不支持https,报错的内容如下:
SSL handshake error: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
Exception: Connection closed in /home/bdata/local/BData-service/vendor/workerman/http-client/src/Request.php:487
Stack trace:
#0 /home/bdata/local/BData-service/vendor/workerman/workerman/Connection/TcpConnection.php(949): Workerman\Http\Request->onUnexpectClose(Object(Workerman\Connection\AsyncTcpConnection))
#1 /home/bdata/local/BData-service/vendor/workerman/workerman/Connection/TcpConnection.php(776): Workerman\Connection\TcpConnection->destroy()
#2 /home/bdata/local/BData-service/vendor/workerman/workerman/Connection/TcpConnection.php(581): Workerman\Connection\TcpConnection->doSslHandshake(Resource id #31)
#3 /home/bdata/local/BData-service/vendor/workerman/workerman/Events/Select.php(294): Workerman\Connection\TcpConnection->baseRead(Resource id #31)
#4 /home/bdata/local/BData-service/vendor/workerman/workerman/Worker.php(2382): Workerman\Events\Select->loop()
#5 /home/bdata/local/BData-service/vendor/workerman/workerman/Worker.php(1490): Workerman\Worker->run()
#6 /home/bdata/local/BData-service/vendor/workerman/workerman/Worker.php(1320): Workerman\Worker::forkOneWorkerForLinux(Object(Workerman\Worker))
#7 /home/bdata/local/BData-service/vendor/workerman/workerman/Worker.php(1294): Workerman\Worker::forkWorkersForLinux()
#8 /home/bdata/local/BData-service/vendor/workerman/workerman/Worker.php(509): Workerman\Worker::forkWorkers()
#9 /home/bdata/local/BData-service/httpclient.php(40): Workerman\Worker::runAll()
#10 {main}SSL handshake error: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:

Not receive a response until a timeout is reached

Hello!
When I make a request, I don't receive a response until a timeout is reached. In Request.php, function checkComplete waits the connection to be closed if empty Content-Length. Why? For responses with a code of 200 and not empty response body everything works correctly, but if the answer is 401 or 201 with empty body, we are waiting for the closing.

我发出的数组 int类型会全部变成了 string

服务器A:

$response = [
 "hello": "123456"
];

$http->request($host,$response)->getBody()->getContents();
接收端B:
$request->only(['hello']);

"data": {
      "hello": "123456"
 }

这是发送端 还是接收端 没处理

如何处理因为网络或dns导致的连接失败?

环境:Workerman version:5.0.0-beta.7 PHP version:8.2.12 Event-loop:Workerman\Events\Revolt
目前当遇到网络波动或dns解析错误而连接失败时,无法处理错误,导致worker重启.

例子代码:

<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;

require_once __DIR__ . '/vendor/autoload.php';

date_default_timezone_set( 'Asia/Shanghai' );
$worker = new Worker();
$worker->count = 1;
$worker->onWorkerStart = function($worker){
	
	$http = new \Workerman\Http\Client();
        $http->request('http://httpbin9.org/cookies', [
            'success' => function ($response) {
                echo $response->getBody();
            },
            'error' => function ($exception) {
                echo $exception;
            }
        ]);
       //or 协程用法
	try {
		$response = $http->request('http://httpbin9.org/cookies');
		echo $response->getBody();
	} catch (\Throwable $th) {
		var_dump('errrrr');
	}

};

Worker::runAll();

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.