php 使用Guzzle将Body作为原始数据发送

tct7dpnv  于 2023-02-03  发布在  PHP
关注(0)|答案(3)|浏览(374)

我尝试使用Guzzle发送POST请求到我的Web服务。此服务接受身体作为原始。它的工作正常,当我使用 Postman ,但我不使用Guzzle。当使用Guzzle,我只得到Web服务的描述,因为我把Web服务的URL在浏览器中。这里是我的代码:

$body = "CA::Read:PackageItems  (CustomerId='xxxxxx',AllPackages=TRUE);";
    $headers = [
        ....
        ....

    ]; 
$client = new Client();
$response = $client->request('POST', 'http://172.19.34.67:9882/TisService',$headers,$body);
echo $body = $response->getBody();

似乎标题或正文未通过。

ve7v8dk2

ve7v8dk21#

像这样试试

$response = $client->request('POST', 'http://172.19.34.67:9882/TisService',['headers' => $headers, 'body' => $body]);
4dbbbstv

4dbbbstv2#

我最近不得不第一次实现Guzzle,它是一个使用起来相当简单的库。
首先,我创建了一个新客户端

// Passed in our options with just our base_uri in
$client = new Client(["base_uri" => "http://example.com"]);

然后我创建了一个POST请求,而不是我如何使用new Request代替$client->request(...,尽管我使用了new Request,但这并不重要。

// Create a simple request object of type 'POST' with our remaining URI
// our headers and the body of our request.
$request = new Request('POST', '/api/v1/user/', $this->_headers, $this->body);

所以本质上它看起来像

$request = new Request('POST', '/api/v1/user/', ['Content-Type' => "application/json, 'Accept' => "application/json"], '{"username": "myuser"}');

$this->headers是一个简单的键值对数组,由我们的请求头组成,确保设置Content-Type头,$this->body是一个简单的字符串对象,在我的例子中,它形成了一个JSON主体。
然后我可以调用$client->send(...方法来发送请求,如下所示:

// send would return us our ResponseInterface object as long as an exception wasn't thrown.
$rawResponse = $client->send($request, $this->_options);

$this->_options是一个简单的键-值对数组,同样比headers数组简单,但它包含了timeout之类的内容。
对于我来说,我创建了一个简单的Factory对象,称为HttpClient,它为我构造了整个Guzzle请求,这就是为什么我只是创建一个新的Request对象,而不是调用$client->request(...,后者也将发送请求。

yqlxgs2m

yqlxgs2m3#

要发送原始数据,您需要做的基本工作是对$data的一个数组进行json_encode,并在请求body中发送它。

$request = new Request(
    'POST',
    $url,
    ['Content-Type' => 'application/json', 'Accept' => 'application/json'],
    \GuzzleHttp\json_encode($data)
);

$response = $client->send($request);
$content = $response->getBody()->getContents();

使用大量请求GuzzleHttp\Psr7\Request;和客户端GuzzleHttp\Client

相关问题