我尝试使用curl库通过PHP脚本将我的数据库上传到我的存储库的bitbucket下载部分。通常我会去我的phpmyadmin并将我的数据库导出到一个文件夹,然后转到我的存储库下载部分下的bitbucket帐户并手动上传。我需要一个自动完成这些任务的脚本。
我尝试使用像这样的curl库:
// bitbucket username and password
define('USERNAME', 'my_username');
define('PASSWORD', 'my_password');
$url = 'https://bbuseruploads.s3.amazonaws.com/';
//This needs to be the full path to the file you want to send.
$file_name_with_full_path = realpath('apache_pb2.gif');
$post = array('extra_info' => '123456', 'file_contents' => '@' . $file_name_with_full_path); // image file example here
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, USERNAME . ":" . PASSWORD);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$resp = curl_exec($ch);
// validate CURL status
if (curl_errno($ch))
throw new Exception(curl_error($ch), 500);
结果:
<error><code>InvalidArgument</code>
<message>Unsupported Authorization Type</message>
<argumentvalue>Basic hash_code_here</argumentvalue>
<argumentname>Authorization</argumentname>
<requestid>hash_code_here</requestid>
<hostid>hash_code_here</hostid>
</error>
如果您需要进一步说明,请告知我们。
答案 0 :(得分:0)
仅在有人在这里找到这具老尸的情况下
我通过此功能解决了它:
/**
* Uploads a file to Bitbucket Download area of the configured repository
* Does the same as thi bash command:
* curl -X POST "https://USER:PW@api.bitbucket.org/2.0/repositories/owner/slug/downloads/" --form files=@"test.txt"
* @param string $filename
* @param string $apiEndpoint
* @param string $apiUser
* @param string $apiPassword
* @return bool|string
* @throws Deployer\Exception\Exception
*/
public static function sendFileToDownload(
string $filename,
string $apiEndpoint,
string $apiUser,
string $apiPassword
) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $apiEndpoint);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLAUTH_BASIC, 1);
curl_setopt($curl, CURLOPT_USERPWD, "$apiUser:$apiPassword");
$data = [
'files' => curl_file_create($filename),
];
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$erg = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($erg === false || $status > 300) {
throw new Deployer\Exception\Exception("Result: ".print_r($erg, true), $status);
}
curl_close($curl);
}
}
对我来说,最重要的一点是本节:
$data = [
'files' => curl_file_create($filename),
];
这导致将本地文件上传到我的回购下载区,名称为$ filename(文件名路径)。
答案 1 :(得分:0)
今天也遇到了同样的问题。 API CURL请求的“不支持的授权类型”响应。
我花了很长时间咨询Google。最后,我发现我的URL在一起(偶然地)有两个斜杠。请参阅,我要连接的API有一个URL,然后是一个API端点。像这样:
https://www.example.com/api/v2/foo-或-
https://www.example.com/api/v2/bar
但是我不小心像这样将它们组合在一起:
curl_setopt($curl, CURLOPT_URL, $url ."/". $endpoint);
给出我的数据:
$url = "https://www.example.com/api/v2/"
$endpoint = "foo"
我最终得到了这个:
"https://www.example.com/api/v2//foo"
问题已解决,只需删除."/".
并使其变为:.
奖金的可能性:在此过程中,我学到了一些有趣的东西,那就是API人士更喜欢在发布给他们的json数据周围加上双引号。我还没有验证这有什么用,但是我不是用单引号将双引号引起来(反之亦然),而是使用转义内部双引号的方式。并且正在工作。