使用 PHP 时发布请求有效,但是当我将 Axios 与 React 一起使用时,它会失败并出现 500 内部错误,我该如何解决?

Posted

技术标签:

【中文标题】使用 PHP 时发布请求有效,但是当我将 Axios 与 React 一起使用时,它会失败并出现 500 内部错误,我该如何解决?【英文标题】:Post request works when use PHP, but it fails with a 500 Internal Error when I use Axios with React, how can I fix that? 【发布时间】:2020-09-10 11:00:18 【问题描述】:

我在 php 中创建了以下代码:

$url = $API_URL.'/api/v1/courses/'.$COURSE_ID.'/quizzes/'.$QUIZ_ID.'/reports?quiz_report[report_type]=student_analysis&quiz_report[includes_all_versions]=1';
$crl = curl_init();
$headr = array();
$headr[] = 'Content-length: 0';
$headr[] = 'Content-type: application/json';
$headr[] = 'Authorization: Bearer '.$API_KEY;
curl_setopt($crl, CURLOPT_URL, $url );
curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
curl_setopt($crl, CURLOPT_POST,true);
$rest = curl_exec($crl);
curl_close($crl);

此代码完美运行。我注意到的重要一点是,如果我删除部分“$headr[] = 'Content-length: 0';”,请求将失败并出现 400 Bad Request 错误。

现在我需要用 React 来做这件事,我使用 Axios,这是我使用的代码:

var config2 = 
  headers: 
    'Access-Control-Allow-Origin': '*',
    'Authorization': "Bearer 11748~BTNBIfTKrIORcK7SVw09Gryq5bc1MipitSFA4K4Lwh1inbv0jfj5z7mL9U6p1GV3",
    'Accept'       : 'application/json',
    'Content-Length' : '0',
    'Content-type' : 'application/json'
  
;
let course_id = '8717'
let quiz_id = '58320'
try 
    let url2 = Constantes.URL_PREFIX+'/courses/'+course_id+'/quizzes/'+quiz_id+'/reports?quiz_report[report_type]=student_analysis&quiz_report[includes_all_versions]=1'
    const response = await axios.post( url2, config2 )
    console.log("xxx - response.data")
    console.log(response.data)
 catch(err) 
    console.log("ERRO - xxx: "+err)

运行代码后,我收到 500 内部错误。 如果我更改以下代码 常量响应 = 等待 axios.post(url2, config2) 到 常量响应 = 等待 axios.get(url2, config2) 该代码有效,但我需要使用 axios.post 运行此代码,就像我使用 PHP 代码一样。

React 应用程序使用 CORS 代理完成所有请求,我也遇到了错误 '内容长度':'0', 当我使用 axios.get 时,我得到的错误是 拒绝设置不安全的标头“Content-Length”

当我使用 axios.post 时没有出现这个错误,而不是这个错误我得到了 500 内部错误。

有什么提示可以解决这个问题吗?

【问题讨论】:

我认为你不需要用 axios 设置内容长度,它会为你做的。 好的,谢谢你告诉我。我将从代码中删除它。我只是把它放在这里,因为它需要在 PHP 上设置。 【参考方案1】:

我使用来自 javascript 的 fetch() 解决了这个问题。

我使用 post 方法进行简单获取对我有用,不知道它对 Axios 不起作用。

我认为这是 Axios 的问题,我稍后会在他们的 Github 上发布消息。

【讨论】:

以上是关于使用 PHP 时发布请求有效,但是当我将 Axios 与 React 一起使用时,它会失败并出现 500 内部错误,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

当我将电子邮件放入有效负载时,Angular 代理出错

Nextjs API 请求仅在本地有效

php登录页面 - 当我插入有效数据时它不起作用,但是当我插入无效数据时它完美地工作[重复]

如何提高axios速度?

在 SQL 中有效但在 PHP 中无效的查询

为啥当我将 SKSpriteNode 与图像一起使用时它不会反弹,但当我使用 SKShapeNode 时它确实有效?