我有一个格式化 MySQL 查询的小型 Rust 程序,但我发现它在更大的查询上失败,返回
Urlencoded 有效负载大小大于允许的大小(默认值:256kB)
我正在使用actix web,它看起来像这样
use actix_web::{
web, App, HttpResponse, HttpServer, Result,
};
#[derive(Deserialize)]
pub struct MyParams {
q: String,
}
fn index(params: web::Form<MyParams>) -> Result<HttpResponse> {
Ok(HttpResponse::Ok()
.content_type("text/html; charset=utf-8")
.body("test"))
// .body(mysql_format2(¶ms.q[..])))
}
fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new().service(
web::resource("/")
.route(web::post().to(index))
)
})
.bind("127.0.0.1:48627")?
.run()
}
调用这个的 PHP 脚本看起来像
$this->FormattedMySQL = str_repeat("make a big query ", 1024*256);
$query = http_build_query([
'q' => $this->FormattedMySQL,
]);
// if I change this to 16385 (+1)
// then it breaks and returns that error
$query = substr($query, 0, 16384);
if ($this->FormatMySQL && strlen($query) <= 262144) {
try {
$this->VerbosePrint('formatting');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, MYSQL_FORMAT_ENDPOINT);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$this->FormattedMySQL = curl_exec($ch);
curl_close($ch);
} catch (Exception $_) { }
}
我错过了什么,或者为什么这似乎会为 16kB 而不是 256kB 抛出此错误?
我看到也可以设置Payload
配置,但我不完全确定如何/在我现有的代码中应用它。