cURL是一个库和命令行工具,用于使用各种协议(如HTTP,FTP和SFTP)传输数据。 cURL项目生成两个产品libcurl和cURL。无论使用哪种cURL产品,此标签都涵盖cURL的所有用法
我正在使用 github api 接受并列出存储库邀请。我正在使用这个链接。 尽管如此,我还是不知道从哪里可以获得invitation_id并将其添加到接受请求中...
我正在编写一个 API,我想处理从表单 POST 上传的文件。表单的标记并不太复杂: < 我正在编写一个 API,我想处理从表单上传的文件 POST。表单的标记并不太复杂: <form action="" method="post" enctype="multipart/form-data"> <fieldset> <input type="file" name="image" id="image" /> <input type="submit" name="upload" value="Upload" /> </fieldset> </form> 但是,我很难理解如何处理此服务器端并与 cURL 请求一起发送。 我熟悉使用带有数据数组的 cURL 发送 POST 请求,并且我读过的有关上传文件的资源告诉我在文件名中添加 @ 符号作为前缀。但这些相同的资源有一个硬编码的文件名,例如 $post = array( 'image' => '@/path/to/myfile.jpg', ... ); 这是哪个文件路径?我在哪里可以找到它?是否会类似于 $_FILES['image']['tmp_name'],在这种情况下我的 $post 数组应该如下所示: $post = array( 'image' => '@' . $_FILES['image']['tmp_name'], ... ); 或者我的处理方式是错误的吗?任何建议将不胜感激。 编辑:如果有人能给我一个代码片段,说明我将使用以下代码片段去哪里,那么我将不胜感激。我主要关注的是我将作为 cURL 参数发送的内容,以及如何在接收脚本中使用这些参数的示例(为了论证,我们将其称为 curl_receiver.php)。 我有这个网络表格: <form action="script.php" method="post" enctype="multipart/form-data"> <fieldset> <input type="file" name="image /> <input type="submit" name="upload" value="Upload" /> </fieldset> </form> 这将是script.php: if (isset($_POST['upload'])) { // cURL call would go here // my tmp. file would be $_FILES['image']['tmp_name'], and // the filename would be $_FILES['image']['name'] } 这是一些将文件发送到 ftp 的生产代码(可能对您来说是一个很好的解决方案): // This is the entire file that was uploaded to a temp location. $localFile = $_FILES[$fileKey]['tmp_name']; $fp = fopen($localFile, 'r'); // Connecting to website. $ch = curl_init(); curl_setopt($ch, CURLOPT_USERPWD, "[email protected]:password"); curl_setopt($ch, CURLOPT_URL, 'ftp://@ftp.website.net/audio/' . $strFileName); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'CURL_callback'); curl_setopt($ch, CURLOPT_BUFFERSIZE, 128); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localFile)); curl_exec ($ch); if (curl_errno($ch)) { $msg = curl_error($ch); } else { $msg = 'File uploaded successfully.'; } curl_close ($ch); $return = array('msg' => $msg); echo json_encode($return); 对于找到这篇文章并使用 PHP5.5+ 的人来说,这可能会有所帮助。 我发现 netcoder 建议的方法不起作用。即这不起作用: $tmpfile = $_FILES['image']['tmp_name']; $filename = basename($_FILES['image']['name']); $data = array( 'uploaded_file' => '@'.$tmpfile.';filename='.$filename, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 我会在 $_POST var 中收到 'uploaded_file' 字段 - 而在 $_FILES var 中什么也没有。 事实证明,对于 php5.5+ 有一个新的 curl_file_create() 函数需要使用。所以上面的内容就变成了: $data = array( 'uploaded_file' => curl_file_create($tmpfile, $_FILES['image']['type'], $filename) ); 由于 @ 格式现已弃用。 这应该有效: $tmpfile = $_FILES['image']['tmp_name']; $filename = basename($_FILES['image']['name']); $data = array( 'uploaded_file' => '@'.$tmpfile.';filename='.$filename, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // set your other cURL options here (url, etc.) curl_exec($ch); 在接收脚本中,您将拥有: print_r($_FILES); /* which would output something like Array ( [uploaded_file] => Array ( [tmp_name] => /tmp/f87453hf [name] => myimage.jpg [error] => 0 [size] => 12345 [type] => image/jpeg ) ) */ 然后,如果你想正确处理文件上传,你可以这样做: if (move_uploaded_file($_FILES['uploaded_file'], '/path/to/destination/file.zip')) { // do stuff } 对于我来说,@符号不起作用,所以我做了一些研究,发现这种方法对我有用,我希望这对你有帮助。 $target_url = "http://server:port/xxxxx.php"; $fname = 'file.txt'; $cfile = new CURLFile(realpath($fname)); $post = array ( 'file' => $cfile ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $target_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: multipart/form-data')); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 100); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $result = curl_exec ($ch); if ($result === FALSE) { echo "Error sending" . $fname . " " . curl_error($ch); curl_close ($ch); }else{ curl_close ($ch); echo "Result: " . $result; } 当我通过 Mercadolibre 的消息系统发送附件时,它对我有用。 答案https://stackoverflow.com/a/35227055/7656744 $target_url = "http://server:port/xxxxx.php"; $fname = 'file.txt'; $cfile = new CURLFile(realpath($fname)); $post = array ( 'file' => $cfile ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $target_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)"); curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: multipart/form-data')); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 100); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $result = curl_exec ($ch); if ($result === FALSE) { echo "Error sending" . $fname . " " . curl_error($ch); curl_close ($ch); }else{ curl_close ($ch); echo "Result: " . $result; } 过程方法中的cURL文件对象: $file = curl_file_create('full path/filename','extension','filename'); Oop 方法中的 cURL 文件对象: $file = new CURLFile('full path/filename','extension','filename'); $data = array('file' => $file); $curl = curl_init(); //curl_setopt ... curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $response = curl_exec($curl); curl_close($curl); 我们可以通过curl请求上传图像文件,将其转换为base64字符串。因此在post中我们将发送文件字符串,然后将其隐藏在图像中。 function covertImageInBase64() { var imageFile = document.getElementById("imageFile").files; if (imageFile.length > 0) { var imageFileUpload = imageFile[0]; var readFile = new FileReader(); readFile.onload = function(fileLoadedEvent) { var base64image = document.getElementById("image"); base64image.value = fileLoadedEvent.target.result; }; readFile.readAsDataURL(imageFileUpload); } } 然后在curl请求中发送它 if(isset($_POST['image'])){ $curlUrl='localhost/curlfile.php'; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $curlUrl); curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS, 'image='.$_POST['image']); $result = curl_exec($ch); curl_close($ch); } 请参阅此处http://technoblogs.co.in/blog/How-to-upload-an-image-by-using-php-curl-request/118 这是我的解决方案,我读了很多帖子,它们真的很有帮助,最后我用 cUrl 和 Php 为小文件构建了代码,我认为它非常有用。 public function postFile() { $file_url = "test.txt"; //here is the file route, in this case is on same directory but you can set URL too like "http://examplewebsite.com/test.txt" $eol = "\r\n"; //default line-break for mime type $BOUNDARY = md5(time()); //random boundaryid, is a separator for each param on my post curl function $BODY=""; //init my curl body $BODY.= '--'.$BOUNDARY. $eol; //start param header $BODY .= 'Content-Disposition: form-data; name="sometext"' . $eol . $eol; // last Content with 2 $eol, in this case is only 1 content. $BODY .= "Some Data" . $eol;//param data in this case is a simple post data and 1 $eol for the end of the data $BODY.= '--'.$BOUNDARY. $eol; // start 2nd param, $BODY.= 'Content-Disposition: form-data; name="somefile"; filename="test.txt"'. $eol ; //first Content data for post file, remember you only put 1 when you are going to add more Contents, and 2 on the last, to close the Content Instance $BODY.= 'Content-Type: application/octet-stream' . $eol; //Same before row $BODY.= 'Content-Transfer-Encoding: base64' . $eol . $eol; // we put the last Content and 2 $eol, $BODY.= chunk_split(base64_encode(file_get_contents($file_url))) . $eol; // we write the Base64 File Content and the $eol to finish the data, $BODY.= '--'.$BOUNDARY .'--' . $eol. $eol; // we close the param and the post width "--" and 2 $eol at the end of our boundary header. $ch = curl_init(); //init curl curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'X_PARAM_TOKEN : 71e2cb8b-42b7-4bf0-b2e8-53fbd2f578f9' //custom header for my api validation you can get it from $_SERVER["HTTP_X_PARAM_TOKEN"] variable ,"Content-Type: multipart/form-data; boundary=".$BOUNDARY) //setting our mime type for make it work on $_FILE variable ); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/1.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0'); //setting our user agent curl_setopt($ch, CURLOPT_URL, "api.endpoint.post"); //setting our api post url curl_setopt($ch, CURLOPT_COOKIEJAR, $BOUNDARY.'.txt'); //saving cookies just in case we want curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // call return content curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); navigate the endpoint curl_setopt($ch, CURLOPT_POST, true); //set as post curl_setopt($ch, CURLOPT_POSTFIELDS, $BODY); // set our $BODY $response = curl_exec($ch); // start curl navigation print_r($response); //print response } 有了这个,我们应该在“api.endpoint.post”上发布以下变量 您可以使用此脚本轻松进行测试,并且您应该在最后一行的函数 postFile() 上收到此调试信息 print_r($响应); //打印响应 public function getPostFile() { echo "\n\n_SERVER\n"; echo "<pre>"; print_r($_SERVER['HTTP_X_PARAM_TOKEN']); echo "/<pre>"; echo "_POST\n"; echo "<pre>"; print_r($_POST['sometext']); echo "/<pre>"; echo "_FILES\n"; echo "<pre>"; print_r($_FILEST['somefile']); echo "/<pre>"; } 在这里,它应该工作得很好,可能是更好的解决方案,但这确实有效,并且对于理解边界和多部分/来自数据 mime 如何在 php 和curl 库上工作非常有帮助, 我最诚挚的问候, 我对我的英语表示歉意,但这不是我的母语。
取消注释 php.ini 中的curl-modul后,出现以下错误: PHP 警告:PHP 启动:无法加载动态库 'C:\Program Files (x86)\EasyPHP-Devserver-16.1 ds-binaries\...
我正在使用 HTML 登录表单来访问应用程序。这在浏览器中有效,但是当我尝试使用curl复制时,我得到“身份验证失败,用户名/密码错误”。我只有李...
curl:符号查找错误:curl:未定义符号:curl_url_cleanup
我在 Ubuntu 20.04.2 LTS (fossa-charmander-14 X60) 中面临这个问题。我购买了新的 DELL Latitude 5420。当我键入命令“curl”时,会出现此错误。 卷曲:符号查找错误...
我正在尝试解析curl请求并解析输出并将其存储在名为res.txt的文件中 这是我的 bash 命令行: 卷曲 --request POST --url 'https://www.virustotal.com/vtapi/v2/url/scan' ...
使用 Jmeter 进行 Testign Curl API 负载测试
我应该如何在jemeter中测试这个?当我从工具导入curl时,jemeter中未显示数据。 卷曲 --location --request POST 'https://bruh.uselotus.io/api/track/' \ --header 'X-API-KEY: 6tZu1NaQ.
Splunk - Rest API - Curl - 因报价不平衡而失败
我正在尝试通过执行 REST API 调用(通过运行搜索查询)将数据写入 outputlookup 文件。 当直接运行搜索时,下面的命令可以工作并将数据写入outputlookup csv文件...
为什么“www.”URL前缀会影响cURL是否可以抓取网页内容?
这是我的设置: $url1 = "www.gyngen.dk"; $url2 = "gyngen.dk"; $curl =curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl,
Php Curl,返回乱码,但是在浏览器中查看并查看源代码时,它是原始html。我需要原始 html
我需要访问原始 html,可以通过在浏览器中打开 url 并查看源代码来获取该原始 html。 然而,当我尝试使用 php 和curl 时,我得到了胡言乱语。 我知道有一个相当简单的解决方案...
使用 LinoVision POE 相机,根据 API,有一种方法可以通过发送 JSON 请求来控制它。可以使用 CURL 或直接的 HTTP URL 来完成此操作吗? 手册中的 JSON 示例...
如何使用 Node.js 在 cURL 请求中正确设置 cookie?
我正在尝试从 Node.js 发出 cURL 请求,但无法正确设置 cookie。相同的 cURL 命令在 Postman 中有效,但在 Node.js 中,我收到未经授权的响应。 我正在使用 fetch 方法...
社交媒体平台 twitter.com / x.com 上的 csrf 令牌存储在名为 x-csrf-token 的标头和名为 ct0 的 cookie 中。 然而,这个令牌似乎从未在
我正在尝试从 OneDrive(我已尝试过curl 和 wget)下载一个 157gb .zip 文件到我通过 ssh 连接的计算机。我通常运行 screen,启动下载,然后分离并
我正在尝试从华为 E8372 发送短信,与该产品的旧版本不同,它现在需要登录(用户名/密码)才能允许进行 API 调用。来自http...
某些带括号的 URL 不适用于 CURL,但适用于 Chrome 和 Firefox。 例如这个网址:https://rdtrkr.com/mg.php?voluum_id=d51b17bc-c537-4f3e-9879-2e373341ae5a&widget_id={widget_id...
我正在尝试从 http://www.elwatannews.com/home/rssfeeds?sectionId=115 获取 rss feed 该网站使用 cloudfare 进行保护。我尝试解决线程卷曲的问题:无法获取 rss ...
您好,感谢您的帮助。 我尝试在curl 命令中传递一对参数。 我已经知道如何传递单个变量,例如我的 MetricType、MetricName、当前时间和 $1 中的值...
我有以下curl命令(更改数据以保护无辜者: curl -s -i -k -X POST https://myserver.mydomain.com/rest/login -H '内容类型:application/json' -d '{"用户名&...