TypeError: Request path contains unescaped characters, how can I fix this

node.jsGithub

node.js Problem Overview


/*Making http request to the api (Git hub)
create request
parse responce
wrap in a function
*/
var https = require("https");

var username = 'lynndor';
//CREATING AN OBJECT
var options = {
    host: 'api.github.com',
    path: ' /users/'+ username +'/repos',
    method: 'GET'
};

var request = https.request(options, function(responce){
    var body = ''
    responce.on("data", function(chunk){
	    body += chunk.toString('utf8')
    });
    responce.on("end", function(){
	    console.log("Body", body);
    });
});
request.end();

> Im trying to create a request to the git hub api, the aim is to get the list repository for the specified you, but i keep getting the above mentioned error, please help

node.js Solutions


Solution 1 - node.js

for other situation can be helpful

JavaScript encodeURI() Function

var uri = "my test.asp?name=ståle&car=saab";
var res = encodeURI(uri); 

Solution 2 - node.js

Your "path" variable contains space

path: ' /users/'+ username +'/repos',

Instead it should be

path: '/users/'+ username +'/repos',

Solution 3 - node.js

> Use encodeURIComponent() to encode uri > > and decodeURIComponent() to decode uri

Its because there are reserved characters in your uri. You will need to encode uri using inbuilt javascript function encodeURIComponent()

var options = {
    host: 'api.github.com',
    path: encodeURIComponent('/users/'+ username +'/repos'),
    method: 'GET'
};

to decode encoded uri component you can use decodeURIComponent(url)

Solution 4 - node.js

Typically, you do not want to use encodeURI() directly. Instead, use fixedEncodeURI(). To quote MDN encodeURI() Documentation...

>If one wishes to follow the more recent RFC3986 for URLs, which makes square brackets reserved (for IPv6) and thus not encoded when forming something which could be part of a URL (such as a host), the following code snippet may help:

> function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }

There is a similar issue with encodeURIComponent() (source: MDN encodeURIComponent() Documentation), as well as a similar fixedEncodeURIComponent() function. These should be used, rather than the actual encodeURI() or encodeURIComponent() function calls...

>To be more stringent in adhering to RFC 3986 (which reserves !, ', (, ), and *), even though these characters have no formalized URI delimiting uses, the following can be safely used:

> function fixedEncodeURIComponent(str) { return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { return '%' + c.charCodeAt(0).toString(16); }); }

Solution 5 - node.js

I was getting this error while trying to hit Elasticsearch's API. For me, it was due to Chinese characters in the Document's Title (in the Request I was sending). Switching to all English characters fixed the issue.

Solution 6 - node.js

Sometimes browser inspector uses abbreviation of long JSON object. In my case, the data included unescaped characters such as '…' which should not be in http request.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLindokuhle Dumisani MasilelaView Question on Stackoverflow
Solution 1 - node.jsqwabraView Answer on Stackoverflow
Solution 2 - node.jspkdView Answer on Stackoverflow
Solution 3 - node.jsNuOneView Answer on Stackoverflow
Solution 4 - node.jsHoldOffHungerView Answer on Stackoverflow
Solution 5 - node.jsGeneView Answer on Stackoverflow
Solution 6 - node.jsDave LeeView Answer on Stackoverflow