鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全/ Laravel5.5的Testing無法請(qǐng)求遠(yuǎn)程地址問題

Laravel5.5的Testing無法請(qǐng)求遠(yuǎn)程地址問題

使用Laravel5.5的Testing做api測(cè)試的時(shí)候,發(fā)現(xiàn)無論怎么設(shè)置請(qǐng)求的都是本地的url。查看源碼發(fā)現(xiàn)

vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php

文件下有段代碼

/**
 * Call the given URI and return the Response.
 *
 * @param  string  $method
 * @param  string  $uri
 * @param  array  $parameters
 * @param  array  $cookies
 * @param  array  $files
 * @param  array  $server
 * @param  string  $content
 * @return \Illuminate\Foundation\Testing\TestResponse
 */
public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
{
    $kernel = $this->app->make(HttpKernel::class);

    $files = array_merge($files, $this->extractFilesFromDataArray($parameters));

    $symfonyRequest = SymfonyRequest::create(
        $this->prepareUrlForRequest($uri), $method, $parameters,
        $cookies, $files, array_replace($this->serverVariables, $server), $content
    );

    $response = $kernel->handle(
        $request = Request::createFromBase($symfonyRequest)
    );

    if ($this->followRedirects) {
        $response = $this->followRedirects($response);
    }

    $kernel->terminate($request, $response);

    return $this->createTestResponse($response);
}

其中

$response = $kernel->handle(
        $request = Request::createFromBase($symfonyRequest)
    );

我猜測(cè)laravel根本沒有發(fā)送遠(yuǎn)程請(qǐng)求,而是直接構(gòu)造$requset灌入kernel執(zhí)行,沒有發(fā)起http請(qǐng)求就意味著沒有經(jīng)過nginx,apache之類的web服務(wù)器。這樣的測(cè)試跟實(shí)際生產(chǎn)環(huán)境有相當(dāng)差異。

PS: PHP發(fā)起http請(qǐng)求幾種方式

file_get_contents
curl
fsocket
GuzzleHttp

沒有查到$kernel->handle($request);之后有執(zhí)行遠(yuǎn)程請(qǐng)求的

回答
編輯回答
話寡

laravel的測(cè)試是這樣的。如果要測(cè)請(qǐng)求服務(wù)器,要自己改改。把里面的 app 換成遠(yuǎn)程的。

2018年8月26日 22:53