我一直在尝试在Guzzle中下载文件并且它是有线的,然后我注意到请求URL已经变得混乱。我不明白如何使用setEncodingType(false);
功能。
这就是我现在所拥有的。
public class Foo{
private $client;
private $loginUrl = 'https://<site>/login';
private $parseUrl = 'https://<site>/download';
public function __construct()
{
require_once APPPATH . 'third_party/guzzle/autoloader.php';
$this->client = new GuzzleHttp\Client(['cookies' => true, 'allow_redirects' => [
'max' => 10, // allow at most 10 redirects.
'strict' => true, // use "strict" RFC compliant redirects.
'referer' => true, // add a Referer header
'protocols' => ['https'], // only allow https URLs
'track_redirects' => true
]]);
}
public function download(){
$q_params = array('param_a'=> 'a', 'param_b'=>'b');
$target_file = APPPATH.'files/tmp.log';
$response = $this->client->request('GET', $this->parseUrl,['query'=>$reportVars, 'sink' => $target_file]);
}
}
有谁能告诉我如何在上面的代码中使用禁用url编码?
答案 0 :(得分:0)
粗略浏览GuzzleHttp\Client::applyOptions的代码表示当您使用“查询”请求选项时,查询将构建到PHP_QUERY_RFC3986,如下所示:
if (isset($options['query'])) {
$value = $options['query'];
if (is_array($value)) {
$value = http_build_query($value, null, '&', PHP_QUERY_RFC3986);
}
if (!is_string($value)) {
throw new \InvalidArgumentException('query must be a string or array');
}
$modify['query'] = $value;
unset($options['query']);
}
Guzzle内部使用GuzzleHttp\Psr7\Uri。请注意withoutQueryValue()
和withQueryValue()
方法如何编码查询字符串。
我的查询参数“硬编码”有很多成功,如下所示:
$uri = 'http://somewebsite.com/page.html?param_a=1¶m2=245';
我还要注意GuzzleHttp\Client
内没有setEncodingType()。