Kdyby/Curl vs PHP cURL – rozdielne odpovede na rovnaky request
- flipis
- Člen | 12
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 | 558
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
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
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