2015-11-15 3 views
0

Я пытаюсь загрузить файл в Guzzle, и он действует на проводной основе. Затем я заметил, что URL-адрес запроса ушел. Я не понимаю, как использовать функцию setEncodingType(false);.Отключение кодировки URL в Guzzle

Это то, что я имею прямо сейчас.

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

Какая версия Guzzle? –

+0

@ShaunBramley Я использую новейший vesion – Fawzan

+0

Как вы определяете, что он собирается haywire? Вы обфускали параметры и значения параметров, поэтому трудно понять, как это может вызвать проблемы с urlencoding. Кроме того, '$ reportVars' не входит в область действия' download() ', что, вероятно, вызывает определенные проблемы. То же самое для '$ q_params' никогда не используется в вызове Guzzle. – ceejayoz

ответ

0

Беглый взгляд через код GuzzleHttp\Client::applyOptions указывает на то, что, когда вы utilze на «запрос» вариант запроса запрос будет построен на 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']); 
    } 

жрать использует GuzzleHttp\Psr7\Uri внутренне. Обратите внимание, что методы withoutQueryValue() и withQueryValue() также кодируют строку запроса.

У меня было много успеха «жесткое кодирование» мои параметры запроса, как следующее:

$uri = 'http://somewebsite.com/page.html?param_a=1&param2=245'; 

Я хотел бы также отметить, что не существует setEncodingType() в GuzzleHttp\Client.

+1

Действительно ли это, как это сделать? Это кажется очень ограниченным или неудобным. – Kevin

Смежные вопросы