Skip to content

Commit 61aee6f

Browse files
committed
fix: PSR requests not setting headers or body correctly
1 parent 2556f7d commit 61aee6f

9 files changed

+40
-32
lines changed

composer.json

+5-3
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,17 @@
2121
"php": "^7.3 || ^8.0",
2222
"php-http/client-implementation": "^1.0",
2323
"php-http/discovery": "^1.0",
24+
"php-http/httplug": "^2.4",
2425
"psr/http-client": "^1.0",
2526
"psr/http-factory": "^1.0",
26-
"psr/http-message": "^1.0|^2.0"
27+
"psr/http-message": "^1.0|^2.0",
28+
"symfony/http-client": "^7.2"
2729
},
2830
"require-dev": {
2931
"guzzlehttp/psr7": "^2.0",
3032
"mockery/mockery": "^1.0",
31-
"php-http/guzzle7-adapter": "^1.0",
32-
"phpunit/phpunit": "^9.3"
33+
"phpunit/phpunit": "^9.3",
34+
"symfony/var-dumper": "^7.2"
3335
},
3436
"autoload": {
3537
"psr-4": {

src/Client.php

+19-13
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
namespace Facebook;
2525

2626
use Facebook\Exception\SDKException;
27-
use Http\Client\HttpClient;
28-
use Http\Discovery\HttpClientDiscovery;
2927
use Http\Discovery\Psr17FactoryDiscovery;
28+
use Http\Discovery\Psr18ClientDiscovery;
29+
use Psr\Http\Client\ClientInterface;
3030

3131
class Client
3232
{
@@ -83,31 +83,31 @@ class Client
8383
/**
8484
* Instantiates a new Client object.
8585
*
86-
* @param null|HttpClient $httpClient
86+
* @param null|ClientInterface $httpClient
8787
* @param bool $enableBeta
8888
*/
89-
public function __construct(HttpClient $httpClient = null, $enableBeta = false)
89+
public function __construct(ClientInterface $httpClient = null, $enableBeta = false)
9090
{
91-
$this->httpClient = $httpClient ?: HttpClientDiscovery::find();
91+
$this->httpClient = $httpClient ?: Psr18ClientDiscovery::find();
9292
$this->enableBetaMode = $enableBeta;
9393
}
9494

9595
/**
9696
* Sets the HTTP client handler.
9797
*
98-
* @param HttpClient $httpClient
98+
* @param ClientInterface $httpClient
9999
*/
100-
public function setHttpClient(HttpClient $httpClient)
100+
public function setClientInterface(ClientInterface $httpClient)
101101
{
102102
$this->httpClient = $httpClient;
103103
}
104104

105105
/**
106106
* Returns the HTTP client handler.
107107
*
108-
* @return HttpClient
108+
* @return ClientInterface
109109
*/
110-
public function getHttpClient()
110+
public function getClientInterface()
111111
{
112112
return $this->httpClient;
113113
}
@@ -186,11 +186,17 @@ public function sendRequest(Request $request)
186186
$request->validateAccessToken();
187187
}
188188

189-
list($url, $method, $headers, $body) = $this->prepareRequestMessage($request);
189+
[$url, $method, $headers, $body] = $this->prepareRequestMessage($request);
190190

191-
$psr7Response = $this->httpClient->sendRequest(
192-
Psr17FactoryDiscovery::findRequestFactory()->createRequest($method, $url, $headers, $body)
193-
);
191+
$psrRequest = Psr17FactoryDiscovery::findRequestFactory()->createRequest($method, $url, $headers, $body)
192+
->withBody(Psr17FactoryDiscovery::findStreamFactory()->createStream($body));
193+
194+
foreach ($headers as $headerKey => $headerValue) {
195+
$psrRequest->withHeader($headerKey, $headerValue);
196+
}
197+
198+
199+
$psr7Response = $this->httpClient->sendRequest($psrRequest);
194200

195201
static::$requestCount++;
196202

src/Facebook.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
use Facebook\PersistentData\PersistentDataInterface;
4040
use Facebook\Url\UrlDetectionHandler;
4141
use Facebook\Url\UrlDetectionInterface;
42-
use Http\Client\HttpClient;
42+
use Psr\Http\Client\ClientInterface;
4343

4444
class Facebook
4545
{
@@ -123,7 +123,7 @@ public function __construct(array $config = [])
123123
if (!$config['app_secret']) {
124124
throw new SDKException('Required "app_secret" key not supplied in config and could not find fallback environment variable "'.static::APP_SECRET_ENV_NAME.'"');
125125
}
126-
if ($config['http_client'] !== null && !$config['http_client'] instanceof HttpClient) {
126+
if ($config['http_client'] !== null && !$config['http_client'] instanceof ClientInterface) {
127127
throw new \InvalidArgumentException('Required "http_client" key to be null or an instance of \Http\Client\HttpClient');
128128
}
129129
if (!$config['default_graph_version']) {

tests/ClientTest.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
use Facebook\Response;
3737
use Facebook\Tests\Fixtures\MyFooBatchHttpClient;
3838
use Facebook\Tests\Fixtures\MyFooHttpClient;
39-
use Http\Client\HttpClient;
4039
use PHPUnit\Framework\TestCase;
40+
use Psr\Http\Client\ClientInterface;
4141

4242
class ClientTest extends TestCase
4343
{
@@ -71,17 +71,17 @@ public function testACustomHttpClientCanBeInjected()
7171
{
7272
$handler = new MyFooHttpClient();
7373
$client = new Client($handler);
74-
$httpClient = $client->getHttpClient();
74+
$httpClient = $client->getClientInterface();
7575

7676
$this->assertInstanceOf(MyFooHttpClient::class, $httpClient);
7777
}
7878

7979
public function testTheHttpClientWillFallbackToDefault()
8080
{
8181
$client = new Client();
82-
$httpClient = $client->getHttpClient();
82+
$httpClient = $client->getClientInterface();
8383

84-
$this->assertInstanceOf(HttpClient::class, $httpClient);
84+
$this->assertInstanceOf(ClientInterface::class, $httpClient);
8585
}
8686

8787
public function testBetaModeCanBeDisabledOrEnabledViaConstructor()
@@ -160,7 +160,7 @@ public function testABatchRequestWillProperlyBatchFiles()
160160
$fbBatchRequest = new BatchRequest($this->fbApp, $fbRequests);
161161
$fbBatchRequest->prepareRequestsForBatch();
162162

163-
list($url, $method, $headers, $body) = $this->fbClient->prepareRequestMessage($fbBatchRequest);
163+
[$url, $method, $headers, $body] = $this->fbClient->prepareRequestMessage($fbBatchRequest);
164164

165165
$this->assertEquals(Client::BASE_GRAPH_VIDEO_URL, $url);
166166
$this->assertEquals('POST', $method);

tests/FacebookTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ public function testCanInjectCustomHandlers()
224224

225225
$this->assertInstanceOf(
226226
FooHttpClientInterface::class,
227-
$fb->getClient()->getHttpClient()
227+
$fb->getClient()->getClientInterface()
228228
);
229229
$this->assertInstanceOf(
230230
FooPersistentDataInterface::class,

tests/Fixtures/FakeGraphApiForResumableUpload.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
namespace Facebook\Tests\Fixtures;
2525

2626
use GuzzleHttp\Psr7\Response;
27-
use Http\Client\HttpClient;
27+
use Psr\Http\Client\ClientInterface;
2828
use Psr\Http\Message\RequestInterface;
2929
use Psr\Http\Message\ResponseInterface;
3030

31-
class FakeGraphApiForResumableUpload implements HttpClient
31+
class FakeGraphApiForResumableUpload implements ClientInterface
3232
{
3333
public $transferCount = 0;
3434
private $respondWith = 'SUCCESS';

tests/Fixtures/FooHttpClientInterface.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
namespace Facebook\Tests\Fixtures;
2525

2626
use GuzzleHttp\Psr7\Response;
27-
use Http\Client\HttpClient;
27+
use Psr\Http\Client\ClientInterface;
2828
use Psr\Http\Message\RequestInterface;
2929
use Psr\Http\Message\ResponseInterface;
3030

31-
class FooHttpClientInterface implements HttpClient
31+
class FooHttpClientInterface implements ClientInterface
3232
{
3333
public function sendRequest(RequestInterface $request): ResponseInterface
3434
{

tests/Fixtures/MyFooBatchHttpClient.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
namespace Facebook\Tests\Fixtures;
2525

2626
use GuzzleHttp\Psr7\Response;
27-
use Http\Client\HttpClient;
27+
use Psr\Http\Client\ClientInterface;
2828
use Psr\Http\Message\RequestInterface;
2929
use Psr\Http\Message\ResponseInterface;
3030

31-
class MyFooBatchHttpClient implements HttpClient
31+
class MyFooBatchHttpClient implements ClientInterface
3232
{
3333
public function sendRequest(RequestInterface $request): ResponseInterface
3434
{

tests/Fixtures/MyFooHttpClient.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
namespace Facebook\Tests\Fixtures;
2525

2626
use GuzzleHttp\Psr7\Response;
27-
use Http\Client\HttpClient;
27+
use Psr\Http\Client\ClientInterface;
2828
use Psr\Http\Message\RequestInterface;
2929
use Psr\Http\Message\ResponseInterface;
3030

31-
class MyFooHttpClient implements HttpClient
31+
class MyFooHttpClient implements ClientInterface
3232
{
3333
public function sendRequest(RequestInterface $request): ResponseInterface
3434
{

0 commit comments

Comments
 (0)