我有Android应用程序将JSON数据发送到在 WAMP服务器上运行的php web服务。
当我通过JSON发送许多记录时,我有一个错误:
"Bad Request
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit."
我更改了 php.ini 中的配置 upload_max_file_size 至 64M 且 upload_max_filesize 至 64M
我怎么能解决这个问题?
答案 0 :(得分:3)
这是因为您的http网络服务(apache?)不允许数据超过LimitRequestFieldSize参数的请求(默认为8190字节)
似乎你的一个JSON请求太大或者Cookie数据的总和太大而且web服务阻止了它。
顺便提一下,增加LimitRequestFieldSize并不是一个好主意,因为存在DOS攻击的风险。
尝试最小化/清除您的Cookie,或简化Json请求。
答案 1 :(得分:1)
您尝试使用incrase LimitRequestFieldSize选项httpd.conf或.htaccess文件。
用法在这里:apache docs
答案 2 :(得分:0)
如果您需要传输大数据(例如,在具有JSON的API之间),而不是使用GET请求并在标头中发布数据,请使用POST请求并在正文中发送数据。
使用POST,您仍然可以使用标头来验证令牌或小数据,但再次发布不适合POST正文中标头的大JSON数据。
这是您使用PHP发布JSON数据的完整系统:
### Sender PHP Side:
# Core function that sends big data with POST:
function curl_post($url, $header, $data){
$CURL = curl_init();
curl_setopt($CURL, CURLOPT_URL, $url);
curl_setopt($CURL, CURLOPT_POST, TRUE);
curl_setopt($CURL, CURLOPT_HTTPHEADER, $header);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $data);
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($CURL);
$http_code = curl_getinfo($CURL, CURLINFO_HTTP_CODE);
curl_close($CURL);
return array($http_code, $result);
}
# Prepare your data and send:
$url = "https://example.com/api.php";
$header = array(
"Content-Type: text/html",
"verify: <your fixed code to verify the request is legit>",
"anything: <you can send anything with headers here but the text you send should be SMALL>"
);
list($http_code, $result) = curl_post($url, $header, json_encode($your_big_data));
echo "http_code: $http_code<br>result: $result";
###########################
### Receiver PHP Side: (api.php in our example)
if (function_exists("apache_request_headers")) {$myHeaders = apache_request_headers();}
# See the headers you posted from other side:
print_r($myHeaders);
# See the JSON POST body you posted from other side:
echo file_get_contents('php://input');