Request: La ruta de solicitud contiene caracteres sin escape

Creado en 29 ene. 2016  ·  17Comentarios  ·  Fuente: request/request

Estoy intentando hacer una solicitud GET simple a un sitio web: https://www.crunchbase.com/location/belgrade/2a22cd01619e1ff39394303b255670cb?utm_source=crunchbase_tc_river&utm_medium=export&utm_campaign=dataset

Recibo un error 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)

¿Hay alguna solución para verificar si la URL es compatible para enviarse en la función de solicitud como parámetro? Estoy usando [email protected] y node v5.5.0

Comentario más útil

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

Todos 17 comentarios

Funciona bien cuando lo hago, usando las mismas versiones que tú:

'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) + '...');
    }
);

¿Puedes publicar tu código?

Investigué el error real.
Este error solo puede ocurrir cuando ingresa un espacio en blanco en la URL, lo intenté, pero la solicitud siempre parece escapar correctamente.
Tendrá que publicar un fragmento o probar una versión más nueva (la suya es bastante antigua) y ver si el error persiste.

Trabajo detrás de un servidor proxy. Su código no parece funcionar detrás de un proxy. Estoy pegando mi código a continuación. ¿Podría decirme si esta es la forma correcta de enviar una solicitud mientras trabaja detrás de un 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) + '...');
    }
)

También una observación interesante es que cuando estoy reemplazando "https" con "http", la solicitud está funcionando correctamente.

¿Entonces tu proxy no es compatible con https?

Por lo que puedo decir, internamente se está produciendo una redirección, pero la redirección parece tener una URL mal formada / incorrecta que contiene espacios en blanco, lo que marca este error.

Si es un proxy público, ¿podría publicar la información?
De lo contrario, agregue un punto de interrupción en "/usr/lib/nodejs/request/index.js:607" e inspeccione la URL pasada a través de cualquier depurador.

Hola @ dsaumyajit007

Esto se ve bien y funciona perfectamente con google.com , resultado después de su fragmento 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 Tenga en cuenta que es posible que esté utilizando un proxy diferente.
Vamos a esperarlo.

Tengo una duda muy básica: estoy ejecutando Node js en Ubuntu 14.04 y en ejecución
node --version
Obtengo v5.5.0. ¿Es esta la versión más estable porque en algún lugar vi que las versiones son 0.xx? ¿Estoy usando la versión correcta de Node? Lo instalé según las instrucciones en https://nodejs.org/en/download/package-manager/#debian -and-ubuntu-based-linux-distributions

Sí, las versiones 0.x son anteriores a la fusión de iojs / nodejs.
v5.5.0 es estable.

Sigo creyendo que es solo tu proxy el que está siendo extraño.

Está bien. ¿Alguna razón por la que el enlace funciona para reemplazar "https" con "http"? Soluciona este problema de alguna manera.

Ok Está trabajando mágicamente ahora. : +1:
Acabo de reinstalar nodejs y el paquete de solicitud. Gracias por toda la ayuda @ sudheesh001 @SimonSchick

Vuelvo a instalar el módulo de solicitud pero falla después de unos días a este error nuevamente

Tuve el mismo problema, me pregunto si las personas que se quejan aquí tienen otro idioma activado en sus teclados. Tengo árabe / inglés. esto podría llevarnos a algún lugar mientras investigamos

Estoy experimentando este problema en Windows (ethernet a la red doméstica) pero no en macOS (wifi a la misma red). El truco http no me funciona.

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

Utilice la solicitud para enviar la solicitud de obtención en el entorno de kubernetes, este error se producirá cuando los parámetros chinos se transporten en la URL, pero no en otros entornos.

¿Fue útil esta página
0 / 5 - 0 calificaciones