Kdyby/Curl vs PHP cURL – rozdielne odpovede na rovnaky request

flipis
Člen | 12
+
0
-

Zdravim, viete mi niekto povedat, ci (a aky) je rozdiel medzi tymito dvoma kodmi?

1)

$request = new Request($url);

$request->headers['Accept'] = 'application/json';
$request->headers['Content-Type'] = 'application/json';
$request->options['USERPWD'] = $this->username . ':' . $this->password;

$response = $request->post(Json::encode($params))->getResponse();

2)

$request = curl_init($url);

$headers= array('Accept: application/json','Content-Type: application/json');
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
curl_setopt($request, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($request, CURLOPT_POST, TRUE);
curl_setopt($request, CURLOPT_POSTFIELDS, Json::encode($params));
curl_setopt($request, CURLOPT_USERPWD, $this->username . ':' . $this->password );

$response = curl_exec($request);

Totizto zatial co ten druhy prechadza bez problemov (vracia HTTP 200 a odpoved v tvare aky ocakavam), ten prvy mi vyhadzuje vynimku 403 Forbidden a vracia chybovu odpoved {"_system_":{"errors":{"_system_":["Agent_id neodpovídá žádosti!"]}}}. Ta znamena, ze system nedokazal identifikovat Agent_id, ktore sa posiela v requeste v ramci JSON pola. Napadlo ma iba to, ze nevie ten JSON precitat, ale netusim preco. Neda sa mi pozriet, ake data prichadzaju na server druhej strany, pretoze k nemu nemam pristup. Niekto nejake napady? Vdaka.

EDIT:

V call stacku som prehliadol jednu vec – request v skutocnosti prejde, aj vrati to, co ma, ale potom sa kontroluje IsForcingFollowRedirect a ten vyhodnoti, ze sa ma redirectnut dalej, pricom nastavi prazdne data (teraz uz ta chyba dava zmysel). Da sa to nejakym sposobom vypnut? Nieco na sposob

curl_setopt($request, CURLOPT_FOLLOWLOCATION, FALSE);

Skusal som

$request->options['FOLLOWLOCATION'] = FALSE;

nepomohlo.

Editoval flipis (28. 7. 2015 16:48)

srigi
Nette Blogger | 559
+
0
-

Skus sniffovat localhosta cez konzolu. Mam definovane taketo dva aliasy. Ten prvy by mal ficat iba na MacOS, ten druhy uz aj na linuxe.

alias sniff="sudo ngrep -d 'lo0' -t '^(DELETE|GET|OPTIONS|POST|PUT) ' 'tcp and port 80'"
alias httpdump="sudo tcpdump -i en1 -n -s 0 -w - | grep -a -o -E \"Host\: .*|GET \/.*\""

A prekrokuj si kod toho nefunkcneho riesenia. Nastavit si krokovanie je vec na tri minuty.

Editoval srigi (21. 7. 2015 16:51)

Unlink
Člen | 298
+
0
-

Alebo si to pošli na nejakú svoj skript :)

flipis
Člen | 12
+
0
-

Editoval som otazku, kukni pls.

flipis
Člen | 12
+
0
-

Pozri pls EDIT otazky.

Unlink
Člen | 298
+
0
-

A prečo ten server na ktorý to posielaš vracia location header? To by logicky nemalo, či?

No a ako to fixnuť, hm
https://github.com/…rlSender.php#L445
tuto to je zakomentované, takže kto vie prečo.

Fixneš to nejako takto

$sender = new CurlSender();
$sender->setConfirmRedirect(function() { return false; });
$request = new Request($url);

$request->headers['Accept'] = 'application/json';
$request->headers['Content-Type'] = 'application/json';
$request->options['USERPWD'] = $this->username . ':' . $this->password;

$response = $sender->send($request->setPost(Json::encode($params)))->getResponse();
flipis
Člen | 12
+
0
-

preco vracia Location Header to netusim…tiez si myslim, ze by nemalo, ale nemam na to dosah…ja som len dostal dokumentaciu a podla nej to napajam…
dik za tip na fix, vyskusam…ale pride mi to trochu krkolomne, tiez by ma zaujimalo, preco je ten riadok zakomentovany…ten by top vpodstate krasne vyriesil

RSS tématu Téma zavřeno