我正在尝试发送我的文件,但是使用GET而不是使用curl POST。
我有:
$data = array(
'uploaded_file' => '@'.$tmpfile.';filename='.$filename,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
我知道我可以轻松地发送带有这样的POST卷曲请求的文件(取自this question here):
public class test {
public static void main(String[]args) {
String test1 = "Nørrebro, Denmark";
String test2 = "ø";
String regex = new String("^&\\S*;$");
String value = test1.replaceAll(regex,"");
System.out.println(test2.matches(regex));
System.out.println(value);
}
}
但是,我不希望我的请求成为POST。我似乎无法弄清楚如何在没有它的情况下合并文件传输。
任何帮助或建议?我想过使用curl_file_create()但是我不知道如何在这里实现它,因为它的文档非常糟糕。
答案 0 :(得分:2)
curl_setopt($ch, CURLOPT_URL, "http://localhost/test.php/?".http_build_query(array(
'name'=>basename($file),
'file_contents'=>file_get_contents($file)
)));
urlencoding是二进制安全的,因此您可以通过这种方式发送任何文件内容,但是, 对于大文件,与multipart / form-data相比,url编码非常浪费,每个非ascii字节(甚至一些ascii字节,如0x20)的开销为300%(例如,NULL字节编码为%00,使用3个字节,其中multipart / form-data只使用1个字节.10 MB二进制文件上传变为~30MB,其中multipart / form-data将使用10 MB) - 所以如果你&#39不要这样做;重新上传大文件,或带宽是否昂贵。您还应该记住许多流行的Web服务器(如nginx和apache)中默认存在的极限最大URL长度限制,以及大多数Web服务器如何记录完整URL,因此您的访问日志文件将变得非常大,包含每个文件以这种方式上传