PHP Curl с вложенным файлом

Я пытаюсь смоделировать PHP CURL POST, который требует загрузки файла.

Вот HTML-форма с веб-сайта, который я пытаюсь отправить: http://pastebin.com/X6Y0mmfP

Файл, который мне нужно загрузить, это "domains.txt", который находится в том же каталоге, что и скрипт.

Используя HTTP-заголовки Live (аддон Firefox), я получил эту информацию:

POST to: http://www.majesticseo.com/reports/bulk-backlinks-upload

Заголовки HTTP:

Host: www.majesticseo.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.majesticseo.com/reports/bulk-backlink-checker
Cookie: _pk_id.2.d6bc=a607157d494109d4.1382175578.4.1388174858.1384073229.; RURI=reports%2Fbulk-    backlink-checker; _pk_ses.2.d6bc=*; STOK=Ox09WRWBeFCU3l3TAim86efmBa
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------210646678590
Content-Length: 1106

Содержание POST:

-----------------------------210646678590\r\n
Content-Disposition: form-data; name="fileType"\r\n
\r\n
SingleColumn\r\n
-----------------------------210646678590\r\n
Content-Disposition: form-data; name="indexType"\r\n
\r\n
F\r\n
-----------------------------210646678590\r\n
Content-Disposition: form-data; name="ajaxLoadUrl"\r\n
\r\n
/reports/downloads/confirm-file-upload/backlinksAjax\r\n
-----------------------------210646678590\r\n
Content-Disposition: form-data; name="file"; filename="domains.txt"\r\n
Content-Type: text/plain\r\n
\r\n
facebook.com\n
twitter.com\n
google.com\n
youtube.com\n
wordpress.org\n
adobe.com\n
blogspot.com\n
wikipedia.org\n
wordpress.com\n
linkedin.com\n
yahoo.com\n
amazon.com\n
flickr.com\n
w3.org\n
pinterest.com\n
apple.com\n
tumblr.com\n
myspace.com\n
microsoft.com\n
vimeo.com\n
digg.com\n
qq.com\n
stumbleupon.com\n
baidu.com\n
addthis.com\n
miibeian.gov.cn\n
statcounter.com\n
bit.ly\n
feedburner.com\n
nytimes.com\n
reddit.com\n
delicious.com\n
msn.com\n
macromedia.com\n
bbc.co.uk\n
weebly.com\n
blogger.com\n
icio.us\n
goo.gl\n
gov.uk\n
cnn.com\n
yandex.ru\n
webs.com\n
google.de\n
mail.ru\n
livejournal.com\n
sourceforge.net\n
go.com\n
imdb.com\n
jimdo.com\n
\r\n
-----------------------------210646678590--\r\n

В ручной загрузке браузера я использую domains.txt, который также является файлом на сервере (в том же каталоге, что и скрипт).

Мой скрипт сначала входит в систему, затем пытается выполнить этот запрос. Это то, что я пытался сделать до сих пор, однако это не принимается:

$ch = curl_init();
$post = array('fileType' => 'SingleColumn',
              'indexType' => 'F',
              'ajaxLoadUrl' => '/reports/downloads/confirm-file-upload/backlinksAjax',
              'file'=>'@'.realpath('./domains.txt') . ';filename=domains.txt'
              );
$post = http_build_query($post);
curl_setopt($ch, CURLOPT_URL, "https://www.majesticseo.com/reports/bulk-backlinks-upload"); 
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT,         10); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,  5 );
curl_setopt($ch, CURLOPT_COOKIEJAR,       'majestic.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE,      'majestic.txt');
curl_setopt($ch, CURLOPT_REFERER, 'https://www.majesticseo.com/reports/bulk-backlink-checker');
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch); 
curl_close($ch);

2 ответа

Это функция и то, как я сгенерировал информацию для запроса

      function send_curl_request_with_attachment($method, $headers, $url, $post_fields) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
if($headers != "" && count($headers) > 0){
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_VERBOSE,true);
$result = curl_exec($ch); 
curl_close($ch);  
return $result;}

$token_slams = "Authorization: Bearer " . $access_token;
$authHeader = array(
$token_slams,
'Accept: application/form-data');

$schedule_path ='../../documents/' . $docs_record["document"];
$cFile = curl_file_create($schedule_path);

$post = array(
    'old_record' => $old_record,
    'employer_number' => $employer_number,
    'payment_date' => $payment_date,
    'fund_year' => $fund_year,
    'fund_month' => $fund_month,
    'employer_schedule'=> $cFile
);

send_curl_request_with_attachment("POST", $authHeader, $my_url, $post);

Curl не очень хорошо работает с относительными путями, пожалуйста, укажите полный путь.
например:

Realpath('/ дом / пользователь /public_html/domains.txt')

Другие вопросы по тегам