您的位置 首页 编程知识

PHP向Go发送大数据量POST请求时,如何保证Go端完整接收数据?

PHP与Go数据交互:高效处理大数据量POST请求 本文探讨PHP程序通过cURL将大量数据POST到Go服务…

PHP向Go发送大数据量POST请求时,如何保证Go端完整接收数据?

PHP与Go数据交互:高效处理大数据量POST请求

本文探讨PHP程序通过cURL将大量数据POST到Go服务端时,Go端可能无法完整接收数据的现象,并提供解决方案。

问题描述:

PHP程序使用cURL将包含超过95万条记录的大型JSON数据POST到Go服务端。Go端尝试多种接收方法,但仅方法二成功接收所有数据,方法一和方法三在数据量超过一定阈值后,Go端接收数据不完整。

立即学习“”;

PHP代码片段:

<?php ini_set('memory_limit', '1024M'); ini_set('post_max_size', '1024M'); // ... (cURL初始化和设置部分) ... // ... (生成大量JSON数据,存储于$jsonData变量) ...  $params = array(     "data" => $jsonData, // 使用变量$jsonData     "file_path" => "http://localhost/test.xlsx",     "export_filename" => "测试导出Excel.xlsx" );  curl_setopt($ch, CURLOPT_POSTFIELDS, $params);  // ... (cURL执行和关闭部分) ... ?>
登录后复制

Go代码片段 (部分):

Go端尝试三种接收数据的方法:

方法一:使用req.ParseForm()解析表单数据。

方法二:直接读取请求体req.Body。

方法三:使用req.FormValue()获取单个表单值。

问题分析:

PHP的cURL默认使用multipart/form-data Content-Type。Go端方法一req.ParseForm()仅能解析application/x-www-form-urlencoded类型数据,导致数据接收失败。方法二直接读取请求体可接收所有数据,但需自行解析JSON。方法三req.FormValue()内部调用ParseMultipartForm,该函数存在默认最大读取大小限制(约42MB)。超过此限制,Go端无法完整接收数据。

解决方案:

为处理大数据量,Go端应:

  1. 直接读取请求体并手动解析JSON (推荐): 这是最可靠的方法,避免了ParseMultipartForm的限制。 代码示例如下:
import (     "encoding/json"     "io"     "net/http" )  func handler(w http.ResponseWriter, r *http.Request) {     body, err := io.ReadAll(r.Body)     if err != nil {         // 处理错误     }     defer r.Body.Close()      var data map[string]interface{}     err = json.Unmarshal(body, &data)     if err != nil {         // 处理错误     }      jsonData := data["data"].(string) // 获取JSON数据     // ... (处理jsonData) ... }
登录后复制
  1. 调整ParseMultipartForm的最大读取大小 (谨慎使用): 这需要在Go代码中显式设置req.ParseMultipartForm(memoryLimit),其中memoryLimit是一个较大的整数值(例如,32

通过以上方法,可以有效解决Go端无法完整接收PHP发送的大数据量POST请求的问题。 推荐使用直接读取请求体并手动解析JSON的方法,因为它更可靠且避免了潜在的内存问题。 记住始终妥善处理错误,并根据实际需要调整内存限制。

以上就是PHP向Go发送大数据量POST请求时,如何保证Go端完整接收数据?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/7493.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部