Php 请求发送图像的格式
我找不到在Twitter上发布更新的正确格式,很明显,没有人对此进行解释 我正在使用PHP和来自的http_socket_oauth库 对我来说,真正困难的部分是“media[]”参数,我不知道该放在哪里,以及该如何编写。我尝试过很多事情,但总是会遇到同样的错误: {“错误”:[{“代码”:195,“消息”:“url参数丢失或无效。”}]} 这是我认为必须满足的要求,但事实并非如此:Php 请求发送图像的格式,php,twitter,Php,Twitter,我找不到在Twitter上发布更新的正确格式,很明显,没有人对此进行解释 我正在使用PHP和来自的http_socket_oauth库 对我来说,真正困难的部分是“media[]”参数,我不知道该放在哪里,以及该如何编写。我尝试过很多事情,但总是会遇到同样的错误: {“错误”:[{“代码”:195,“消息”:“url参数丢失或无效。”}]} 这是我认为必须满足的要求,但事实并非如此: $request = array( 'method' => 'POST',
$request = array(
'method' => 'POST',
'header' => array(
'Content-Type' => 'multipart/form-data',
),
'uri' => array(
'host' => 'api.twitter.com',
'path' => '1.1/statuses/update_with_media.json',
'scheme' => 'https',
),
'auth' => array(
'method' => 'OAuth',
'oauth_token' => $this->Session->read('Twitter.oauth_token'), // From session
'oauth_token_secret' => $this->Session->read('Twitter.oauth_token_secret'), // From session
'oauth_consumer_key' => Configure::read('Twitter.consumer_key'), // APP key
'oauth_consumer_secret' => Configure::read('Twitter.consumer_secret'), // APP secret
),
'body' => array(
'status' => 'This is a Test ',
'media[]' => '@{http://www.mydomail.com/img/Drop100.gif},
),
);
谢谢 我已经解决了这个问题 问题是来自的http_socket_oauth库没有为多部分表单准备数据。因此,我在发送请求之前添加了Multipart的句柄 来自我的控制器的请求是这样生成的:
$request = array(
'method' => 'POST',
'header' => array(
'Content-Type' => 'multipart/form-data',
),
'uri' => array(
'host' => 'api.twitter.com',
'path' => '1.1/statuses/update_with_media.json',
'scheme' => 'https',
),
'auth' => array(
'method' => 'OAuth',
'oauth_token' => $this->Session->read('Twitter.oauth_token'), // From Session
'oauth_token_secret' => $this->Session->read('Twitter.oauth_token_secret'), // From Session
'oauth_consumer_key' => Configure::read('Twitter.consumer_key'),
'oauth_consumer_secret' => Configure::read('Twitter.consumer_secret'),
),
'data' => array(
'media[]' => './img'.DS.'Dropial-logo-128.png',
),
'body' => array(
'status' => 'This is a test!',
),
);
我添加到http_socket_oauth库的代码是:
if(isset($request['header']['Content-Type']) && $request['header']['Content-Type']=='multipart/form-data'){
App::uses('String', 'Utility');
$boundary = String::uuid();
$body = "--{$boundary}\r\n";
foreach ($request['body'] as $key => $value) {
$body .= "Content-Disposition: form-data; name=\"{$key}\"\r\n";
$body .= "\r\n";
$body .= "{$value}\r\n";
$body .= "--{$boundary}\r\n";
}
foreach ($request['data'] as $key => $path) {
$body .= "Content-Disposition: form-data; name=\"{$key}\"; filename=\"{$path}\"\r\n";
$body .= "\r\n";
$body .= file_get_contents($path) . "\r\n";
$body .= "--{$boundary}--\r\n";
}
$request['body'] = $body;
$request['header']['Content-Type'] = "multipart/form-data; boundary={$boundary}";
}
正如你所看到的,我不得不重写body和header参数
就在这之前
return parent::request($request);
就这样。谢谢你,特伦斯 无法从URL发布图像(http://....). 当您尝试发布本地图像时会发生什么情况?我尝试过:
$handle=fopen(WWW_ROOT.DS.img.DS.Dropial-logo-128.png',rb')$image=fread($handle,filesize(WWW_ROOT.DS.img.DS.Dropial-logo-128.png));fclose($handle)
然后使用此'media[]'=>'@{.$image.'};类型={image/png};filename={Dropial-logo-128.png}'
但是得到了相同的错误。也可以尝试使用硬编码路径:'media[]'=>'{.WWW_ROOT.'img'.DS.'Dropial-logo-128.png'.};类型={image/png};filename={Dropial-logo-128.png}'
和相同的结果。。