Axios发布请求出现错误400,错误请求

时间:2019-06-07 09:14:03

标签: reactjs api axios

我正在为项目使用Hackerrank API。 请参阅官方文档,单击here

他们的网站上有一个使用UNIREST的示例,

unique(unlist(kmers)[unlist(cnts) == 4])

由于我使用axios,因此将其转换为等效的axios代码,如下所示:

unirest.post("https://hackerrank-hackerrank.p.rapidapi.com/https://api.hackerrank.com/checker/submission.json")
.header("X-RapidAPI-Host", "hackerrank-hackerrank.p.rapidapi.com")
.header("X-RapidAPI-Key", "a72a0f1b5dmshdc3f55e233876eap1b8939jsnffad2a5b6e6e")
.header("Content-Type", "application/x-www-form-urlencoded")
.send("callback_url=https://mywebsite.com/responseHandler")
.send("source=puts 'Hello World'")
.send("lang=8")
.send("testcases=["This is input 1", "This is input 2"]")
.send("wait=false")
.send("format=json")
.end(function (result) {
  console.log(result.status, result.headers, result.body);
});

我希望这可以像示例中所示的示例一样工作,但是它给了我以下错误:

  

请求失败,状态码为400
  错误:请求失败,状态码为400
     在createError(createError.js:16)
     在解决时(settle.js:18)
     在XMLHttpRequest.handleLoad(xhr.js:77)

我对此还比较陌生,如果有人可以指出我做错了什么,那将非常有帮助!

2 个答案:

答案 0 :(得分:0)

由于请求Content-Typeapplication/x-www-form-urlencoded,因此您应以FromData的身份传递数据

var data= new FormData(); // Currently empty
data.append('callback_url', 'https://mywebsite.com/responseHandler');
data.append('source', "puts 'Hello World'");
data.append('lang', '8');
data.append('testcases', "[\"This is input 1\", \"This is input 2\"]");
data.append('wait', false);
data.append('format', "json");
data.append('api_key', "<valid hackerrenk api key>"); // API KEY is mandatory

axios.post("https://hackerrank-hackerrank.p.rapidapi.com/https://api.hackerrank.com/checker/submission.json", data, config)
            .catch((error) => {
                console.log(error.message);
            })
            .then((response) => {
                console.log(response);
            })

答案 1 :(得分:0)

Ashish 为我指明了正确的方向,但使用 FormData() 我收到的是状态 415(不支持的媒体类型)而不是状态 400。

对我有用的是使用 URLSearchParams() 而不是 FormData()like in this example

var data= new URLSearchParams(); // Currently empty
data.append('callback_url', 'https://mywebsite.com/responseHandler');
data.append('source', "puts 'Hello World'");
data.append('lang', '8');
data.append('testcases', "[\"This is input 1\", \"This is input 2\"]");
data.append('wait', false);
data.append('format', "json");
data.append('api_key', "<valid hackerrenk api key>"); // API KEY is mandatory

axios.post("https://hackerrank-hackerrank.p.rapidapi.com/https://api.hackerrank.com/checker/submission.json", data, config)
            .catch((error) => {
                console.log(error.message);
            })
            .then((response) => {
                console.log(response);
            })

(我有一个不同 URL 的不同示例,但无法分享我的示例,因为它是来自我公司的 URL)