'Github API is responding with a 403 when using Request's request function
I am trying to make a request to github's API. Here is my request:
var url = 'https://api.github.com/' + requestUrl + '/' + repo + '/';
request(url, function(err, res, body) {
if (!err && res.statusCode == 200) {
var link = "https://github.com/" + repo;
opener(link);
process.exit();
} else {
console.log(res.body);
console.log(err);
console.log('This ' + person + ' does not exist');
process.exit();
}
});
This is what I get for my response:
Request forbidden by administrative rules. Please make sure your request has a User-Agent header (http://developer.github.com/v3/#user-agent-required). Check https://developer.github.com for other possible causes.
I have used the exact same code in the past, and it has worked. No errors are being thrown by request. Now I am confused with why I am getting a 403 (Forbidden)? Any solutions?
Solution 1:[1]
As explained in the URL given in the response, requests to GitHub's API now require a User-Agent
header:
All API requests MUST include a valid
User-Agent
header. Requests with noUser-Agent
header will be rejected. We request that you use your GitHub username, or the name of your application, for theUser-Agent
header value. This allows us to contact you if there are problems.
The request
documentation shows specifically how to add a User-Agent
header to your request:
var request = require('request');
var options = {
url: 'https://api.github.com/repos/request/request',
headers: {
'User-Agent': 'request'
}
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
var info = JSON.parse(body);
console.log(info.stargazers_count + " Stars");
console.log(info.forks_count + " Forks");
}
}
request(options, callback);
Solution 2:[2]
From C# and using
HttpClient
you can do this (tested on latest .Net Core 2.1):
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add( new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.UserAgent.TryParseAdd("request");//Set the User Agent to "request"
using (HttpResponseMessage response = client.GetAsync(endPoint).Result)
{
response.EnsureSuccessStatusCode();
responseBody = await response.Content.ReadAsByteArrayAsync();
}
}
Thanks
Solution 3:[3]
If Github API is responding with status Code : 403, It simply mean that your API fetching limit has been exceeded please wait for 1 min and again fetch then you will get your data,
Solution 4:[4]
ANGULAR
I had the same issue where I got 403 rate limit exceeded. I tried setting up the Authorization
header using new HttpHeaders
from angular/common but the header still failed.
The code that failed is:
getUser(username: string): Observable<any> {
this.headers.set('Authorization', `token ${this.ACCESS_TOKEN}`);
const endpoint = `https://api.github.com/users/${username}`;
return this.http.get(endpoint, {
headers: this.headers
}).pipe(response => {
return response
});
}
The code that worked:
getUser(username: string): Observable<any> {
const endpoint = `https://api.github.com/users/${username}`;
return this.http.get(endpoint, {
headers: {
Authorization: `token ${this.ACCESS_TOKEN}`,
}
}).pipe(response => {
return response
});
}
In this case, I directly set the header in the request headers segment.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | kfb |
Solution 2 | Ernest |
Solution 3 | Jchy |
Solution 4 | Live Software Developer |