Jump to content
php.lv forumi

curl, multipart post


tamtaram

Recommended Posts

es ar curl no savas http://mypage/ aizpostoju uz http://somepage/ failu:

 

$postdata = array();

$postdata['file'] = "@file.txt";
$url = 'http://somepage/';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

$response = curl_exec($ch);

 

tālāk http://somepage/ varbūt apstrādā viņu, varbūt kkas tomēr nepatīk un izmet whatever kādu infu, kuru es postējot caur http://mypage/, protams, neredzu.

jautājums tātad tāds, kā tad lai es savācu to, ko http://somepage/ man tur ir uzrakstījis?

Link to comment
Share on other sites

Redzu, ko tā nozīmē. Un tagad arī redzu, ka vaina ir konkrētajā http://somepage/ lapā. Tā neatgriež vai neļauj atgriezt neko pat tikai plikas CURLOPT_URL gadījumā. Iespējams, ka viņi čeko vēl papildus hederus kkādus. Iedevu viņiem vēl brauzeri, bet tāpat neko nedod atpakaļ.

 

Kopumā ideja ir tāda: griežās softs ar failu augšuplādi, viņš tos apskatās un pasaka, kas tad tur īsti ir. Šim softam caur attālinātu formu var padot failus, formai var piekļūt ar jebkuru useragentu, bet softs akceptē tikai tos failus, kuri nākuši no viņam vēlāmā useragenta izmantotās formas. Ja brauzerī nomaina useragentu, tad ir iespējams augšuplādēt, bet katrs lietotājs katru reizi nemainīs pārlūkprogrammas iestatījumus, tādēļ ar curl useragents jānofeiko. Augšuplādētais fails pirms sūtīšanas tiek vēl softvāriski apstrādāts un pieglabāts uz kastes un tad ar curl padots softam. Bet šinī gadījumā atpakaļ nekas nenāk.

Edited by tamtaram
Link to comment
Share on other sites

Tāpat neko nedod pretī, pat pēc pilnīgas vitālo headeru iebarošanas. Nu izņemot errorus.

Strādājošā variantā viņš headerī pārsūta info arī par to failu, piemēram:

 

Content-Type: multipart/form-data; boundary=---------------------------22577280756664
Content-Length: 220
-----------------------------22577280756664
Content-Disposition: form-data; name="file"; filename="file.mp3"
Content-Type: application/octet-stream

#!MP3
<‘ѕfy
-----------------------------22577280756664--

 

Curl variantā tā softs beidzot kaut ko izmet pretī, precīzāk, apacis izmet erroru: Error 413 - Request entity too large!

Izņemot 'Content-Length: 220' no headeriem, errors pazūd, bet strādājošā variantā headeros tiek padots daudz reizes lielāks 'Content-Length' un programma apstrādā daudz reizes lielākus failus.

Varbūt ir kāds alternatīvs variants kā nofeikot pārlūkprogrammu kurā tikai veikts POST?

Edited by tamtaram
Link to comment
Share on other sites

Apmēram tā:

<?php

$file = '0000000000000.txt';
$submit_url = 'http://dfgfdggf.com/ffdgfdgf.php?dir=hvz';

$formvars = array(
'poga'=> 'Augshuplaadeet',
'file' => '@'.realpath($file)
);
$ch = curl_init($submit_url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Hakorz');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_REFERER, 'http://blackhalt.wordpress.com/');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $formvars);

echo $pnp_result_page = curl_exec($ch);
curl_close ($ch);

?>

Link to comment
Share on other sites

Man tāds mazs offtopic.

 

Ko dara ar "curl" un kur viņu reāli pielieto.? Lasīju dokumentācijā, ka tas atļauj pieslēgties un komunicēt ar dažādiem serveru un protokolu tipiem, bet lielāka skaidrība nekļuva par to kas tas par zvēru un ko tas ēd :/

Link to comment
Share on other sites

Tas ļauj pašam kabināt kopā un sūtīt raw datus pa dažādiem protokoliem dažādiem serveriem. Pēc idejas, izlasot šo, visam vajadzētu būt skaidram: :)

 

PHP supports libcurl, a library created by Daniel Stenberg, that allows you to connect and communicate to many different types of servers with many different types of protocols. libcurl currently supports the http, https, ftp, gopher, telnet, dict, file, and ldap protocols. libcurl also supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading (this can also be done with PHP's ftp extension), HTTP form based upload, proxies, cookies, and user+password authentication.

 

php.net/curl

 

Palasi arī http://en.wikipedia.org/wiki/CURL

Link to comment
Share on other sites

×
×
  • Create New...