Request: O caminho da solicitação contém caracteres sem escape

Criado em 29 jan. 2016  ·  17Comentários  ·  Fonte: request/request

Estou tentando fazer uma solicitação GET simples para um site: https://www.crunchbase.com/location/belgrade/2a22cd01619e1ff39394303b255670cb?utm_source=crunchbase_tc_river&utm_medium=export&utm_campaign=dataset

Recebo um erro como este:

throw new TypeError('Request path contains unescaped characters.');
    ^

TypeError: Request path contains unescaped characters.
    at new ClientRequest (_http_client.js:53:11)
    at TunnelingAgent.exports.request (http.js:31:10)
    at TunnelingAgent.createSocket (/usr/lib/nodejs/tunnel-agent/index.js:117:25)
    at TunnelingAgent.createSecureSocket [as createSocket] (/usr/lib/nodejs/tunnel-agent/index.js:184:41)
    at TunnelingAgent.addRequest (/usr/lib/nodejs/tunnel-agent/index.js:80:8)
    at new ClientRequest (_http_client.js:137:16)
    at Object.exports.request (http.js:31:10)
    at Object.exports.request (https.js:181:15)
    at Request.start (/usr/lib/nodejs/request/index.js:607:30)
    at Request.end (/usr/lib/nodejs/request/index.js:1235:28)

Existe alguma correção para verificar se o url é compatível para ser enviado na função de solicitação como um parâmetro? Estou usando [email protected] e node v5.5.0

Comentários muito úteis

let url = 'http://localhost:30001?q=ааббввггдд'
axios.get(encodeURI(url)).then( data => { })

Todos 17 comentários

Funciona bem quando faço isso, usando as mesmas versões que você:

'use strict';

const request = require('request');

request(
    'https://www.crunchbase.com/location/belgrade/2a22cd01619e1ff39394303b255670cb?utm_source=crunchbase_tc_river&utm_medium=export&utm_campaign=dataset',
    (error, response, body) => {
        if (error) {
            return console.error(error);
        }
        return console.log(body.substr(0, 128) + '...');
    }
);

Você pode postar o código?

Eu verifiquei o erro real.
Este erro só pode ocorrer quando você coloca um espaço em branco na url, tentei fazer isso, mas a solicitação sempre parece escapar deles corretamente.
Você terá que postar um snippet ou tentar uma versão mais recente (a sua é bem antiga) e ver se o erro persiste.

Eu trabalho atrás de um servidor proxy. Seu código não parece funcionar atrás de um proxy. Estou colando meu código abaixo. Você poderia me dizer se esta é a maneira correta de enviar uma solicitação ao trabalhar por trás de um servidor proxy.

'use strict';

const request = require('request');


var get_config = function(site_url){
    var config = {
        url : ((site_url)),
        proxy : 'http://proxyhost:proxyport'
    };

    return config;
};
request(
    get_config('https://www.crunchbase.com/location/belgrade/2a22cd01619e1ff39394303b255670cb?utm_source=crunchbase_tc_river&utm_medium=export&utm_campaign=dataset'),
    (error, response, body) => {
        if (error) {
            return console.error(error);
        }
        return console.log(body.substr(0, 128) + '...');
    }
)

Também uma observação interessante é que quando estou substituindo "https" por "http", a solicitação está funcionando corretamente.

Seu proxy não suporta https então?

Pelo que eu posso dizer, internamente há algum redirecionamento acontecendo, mas o redirecionamento parece ter um URL malformado / inválido que contém espaços em branco, que assinala esse erro.

Se for um proxy público, você poderia postar as informações?
Caso contrário, adicione um ponto de interrupção em "/usr/lib/nodejs/request/index.js:607" e inspecione o url passado por meio de qualquer depurador.

Ei @ dsaumyajit007

Isso parece bom e funciona perfeitamente com google.com , resultado após seu trecho de código.

const request = require('request');


var get_config = function(site_url){
    var config = {
        url : ((site_url)),
        proxy : 'http://proxyurl:proxyport'
    };

    return config;
};
request(
    get_config('https://www.crunchbase.com/location/belgrade/2a22cd01619e1ff39394303b255670cb')
    , (function (error, response, body) {
        console.log(response.statusCode);
        console.error(error);
        return console.log(body.substr(0, 128) + '...');
    })
);

Por google.com

null
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-IN"><head><meta content="text/html; charset=UTF-...

@ sudheesh001 Observe que você pode estar usando um proxy diferente.
Vamos esperar por ele.

Tenho uma dúvida muito básica: estou executando o Node js no Ubuntu 14.04 e em execução
node --version
Eu obtenho a v5.5.0. Esta é a versão mais estável porque em algum lugar eu vi que as versões são 0.xx. Estou usando a versão certa do Node? Eu instalei de acordo com as instruções em https://nodejs.org/en/download/package-manager/#debian -and-ubuntu-based-linux-distributions

Sim, as versões 0.x são anteriores à fusão iojs / nodejs.
v5.5.0 é estável.

Ainda acredito que é apenas o seu proxy estranho.

OK. Algum motivo para o link funcionar substituindo "https" por "http"? Ele corrige esse problema de alguma forma

Ok, está funcionando magicamente agora. : +1:
Acabei de reinstalar o nodejs e o pacote de solicitação. Obrigado por toda a ajuda @ sudheesh001 @SimonSchick

Eu reinstalo o módulo de solicitação, mas ele falha depois de alguns dias para este erro novamente

Tive o mesmo problema, será que as pessoas reclamando aqui têm outro idioma ativado em seus teclados? Eu tenho árabe / inglês. isso pode nos levar a algum lugar enquanto investigamos

Estou tendo esse problema no Windows (Ethernet para rede doméstica), mas não no macOS (Wi-Fi para a mesma rede). O truque http não funciona para mim.

let url = 'http://localhost:30001?q=ааббввггдд'
axios.get(encodeURI(url)).then( data => { })

Use a solicitação para enviar a solicitação get no ambiente kubernetes. Esse erro ocorrerá quando os parâmetros chineses forem carregados no url, mas não em outros ambientes

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jdarling picture jdarling  ·  3Comentários

ghost picture ghost  ·  3Comentários

ghost picture ghost  ·  3Comentários

xin7c picture xin7c  ·  3Comentários

jsspace picture jsspace  ·  3Comentários