[英]How can I upload file Curl PHP
我正在嘗試使用Curl和PHP發布文件。
我有以下指示:
提交文件
使用HTTP POST(具有encType:multipart / form-data)提交上載文件(用於存款或用於批量查詢)。 所有提交的URL為https:// doi.crossref.org/servlet/deposit。 您也可以使用https://test.crossref.org/servlet/deposit將提交內容提交到我們的測試系統。
使用curl的示例:
要上傳文件:
curl -F'操作= doQueryUpload'-F'login_id =用戶名'-F'login_passwd = PASSWORD'-F'fname = @ FILENAME'https:// doi.crossref.org/servlet/deposit
這是我正在嘗試的代碼
<?php
ini_set('display_errors', E_ALL);
define('CROSSREF_API_URL', 'https://test.crossref.org/servlet/deposit');
define('CROSSREF_API_DEPOSIT_OK', 303);
define('CROSSREF_API_RESPONSE_OK', 200);
echo registerDoi(realpath('test.xml'));
function registerDoi($filename) {
$curlCh = curl_init();
curl_setopt($curlCh, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlCh, CURLOPT_POST, true);
curl_setopt($curlCh, CURLOPT_HEADER, 1);
curl_setopt($curlCh, CURLOPT_BINARYTRANSFER, true);
$username = 'username';
$password = '123456';
curl_setopt($curlCh, CURLOPT_URL, CROSSREF_API_URL);
curl_setopt($curlCh, CURLOPT_USERPWD, "$username:$password");
// Transmit XML data.
assert(is_readable($filename));
$fh = fopen($filename, 'rb');
$httpheaders = array();
$httpheaders[] = 'Content-Type: application/vnd.crossref.deposit+xml';
$httpheaders[] = 'Content-Length: ' . filesize($filename);
curl_setopt($curlCh, CURLOPT_HTTPHEADER, $httpheaders);
curl_setopt($curlCh, CURLOPT_INFILE, $fh);
curl_setopt($curlCh, CURLOPT_INFILESIZE, filesize($filename));
$response = curl_exec($curlCh);
if ($response === false) {
$result = 'response from server.';
} elseif ( $status = curl_getinfo($curlCh, CURLINFO_HTTP_CODE) != CROSSREF_API_DEPOSIT_OK ) {
$result = $response;
} else {
// Deposit was received
$result = 'recebido';
}
curl_close($curlCh);
return $result;
}
?>
這是錯誤:
HTTP / 1.1 405方法不允許服務器:Apache-Coyote / 1.1 Crossref-Deployment-Name:cs3-1內容類型:text / plain; charset = UTF-8內容語言:zh-CN內容長度:17日期: 2018年5月10日,星期四,格林尼治標准時間(GMT)連接:關閉嚴格運輸安全:max-age = 15768000不支持GET
知道如何放置該文件嗎?
編輯
我按照@waterloomatt的指示進行操作,現在又遇到另一個錯誤
這是代碼:
<!DOCTYPE html>
<html>
<body>
<form action="deposito.php" method="post" name="frmUpload" enctype="multipart/form-data">
<tr>
<td>Upload</td>
<td align="center">:</td>
<td><input name="file" type="file" id="file"/></td>
</tr>
<tr>
<td> </td>
<td align="center"> </td>
<td><input name="btnUpload" type="submit" value="Upload" /></td>
</tr>
</body>
</html>
<?php
if (isset($_POST['btnUpload']))
{
$url = "https://test.crossref.org/servlet/deposit";
$filename = $_FILES['file']['name'];
$filedata = $_FILES['file']['tmp_name'];
$filesize = $_FILES['file']['size'];
$username = 'usename';
$password = '1234';
if ($filedata != '')
{
$headers = array("Content-Type:multipart/form-data"); // cURL headers for file uploading
$postfields = array("filedata" => "@$filedata", "fname" => $filename);
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => true,
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $postfields,
CURLOPT_INFILESIZE => $filesize,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => "$username:$password",
CURLOPT_BINARYTRANSFER => true
); // cURL options
curl_setopt_array($ch, $options);
$errmsg = curl_exec($ch);
curl_close($ch);
}
else
{
$errmsg = "Please select the file";
}
echo $errmsg;
}
錯誤信息:
HTTP / 1.1 100繼續HTTP / 1.1 401未經授權的服務器:Apache-Coyote / 1.1 Crossref-Deployment-Name:cs3-1 Set-Cookie:JSESSIONID = B2110CC01E3542D50E21D9898D4FD5F2; 路徑= /內容類型:文本/純文本;字符集= UTF-8內容語言:zh-CN內容長度:24日期:2018年5月14日星期一13:10:07 GMT連接:關閉嚴格的傳輸安全性: max-age = 15768000請求中沒有登錄信息
有誰知道為什么無法識別登錄名和密碼?
我有同樣的問題。 我做了什么:
首先,將URL作為參數添加到curl_init
$ch = curl_init($url);
其次,使用類CURLFile代替@ 。
最后,代替CURLOPT_USERPWD發送這樣的憑據。
$postfields = array(
'login_id' => $username,
'login_passwd' => $password,
'fname' => new CURLFile($filedata),
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.