Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> "zaawansowane" zapytanie POST ze skryptu PHP, wysyłanie MMSów przez Intellisoftware nie działa
carambas
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.03.2009

Ostrzeżenie: (0%)
-----


Witam,

to mój pierwszy post, dzień dobry.

Mam problem z zapytaniem POST. Chcę wysłać wiadomość MMS przez bramkę intellisoftware. Pod tym (http://www.intellisoftware.co.uk/sms-gateway/http-interface/send-mms/) linkiem jest dostępny opis formatu MMSa.

Przepiszę go tu dla leniwych:



CODE
Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="username"
Content-Type: text/plain

YourUsername
--AaB03x
Content-Disposition: form-data; name="password"
Content-Type: text/plain

YourPassword
--AaB03x
Content-Disposition: form-data; name="to"
Content-Type: text/plain

0771012345
--AaB03x
Content-Disposition: form-data; name="from"
Content-Type: text/plain

0771054321
--AaB03x
Content-Disposition: form-data; name="type"
Content-Type: text/plain

5
--AaB03x
Content-Disposition: form-data; name="text"
Content-Type: text/plain

MMS Message Subject
--AaB03x
Content-Disposition: form-data; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x
Content-Disposition: form-data; filename="file2.gif"
Content-Type: image/gif
Content-Transfer-Encoding: binary

...contents of file2.gif...
--AaB03x--


To jest zendowski dump mojego zapytania:
CODE
["zapytanie"] => array(1) {
["http"] => array(3) {
["method"] => string(4) "POST"
["header"] => string(52) "Content-Type: multipart/form-data; boundary=AaB03x
"
["content"] => string(5471) "--AaB03x
Content-Disposition: form-data; name="username"
Content-Type: text/plain

intelli_login
--AaB03x
Content-Disposition: form-data; name="password"
Content-Type: text/plain

intelli_password
--AaB03x
Content-Disposition: form-data; name="to"
Content-Type: text/plain

48608288403
--AaB03x
Content-Disposition: form-data; name="from"
Content-Type: text/plain

maciek
--AaB03x
Content-Disposition: form-data; name="type"
Content-Type: text/plain

5
--AaB03x
Content-Disposition: form-data; name="text"
Content-Type: text/plain

tematMMs
--AaB03x
Content-Disposition: form-data; filename="file1.txt"
Content-Type: text/plain

treasav
adfaf
aefafae
faefaefaefa


tttt

--AaB03x
Content-Disposition: form-data; filename="file2.gif"
Content-Type: image/gif
Content-Transfer-Encoding: binary

GIF89(...);
--AaB03x--"


Wyciąłem zawartość Gifa, żeby nie zaśmiecać tego tematu jeszcze bardziej.


Odpowiedź serwera to stale "request invalid". Hasło i login mam ok (jak zmienie, to krzyczy, że "login invalid"). Wydaje mi się, że zapytanie też mniej więcej ok.

Całe zapytanie wysyłam do severa w ten sposób:
CODE
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-Type: multipart/form-data; boundary=AaB03x'."\r\n",
'content' => $content
)
);

$context = stream_context_create($opts);
$fp = fopen('http://www.intellisoftware.co.uk/smsgateway/default.aspx', 'rb', false, $context);

$result = stream_get_contents($fp);


gdzie $content to jest to, co jest w tym dumpie jedną rubrykę wyżej.

Nie wysyłałem nigdy żadnego POSTa, więc nie mam pojęcia co może być nie tak.


Za wszelkie próby pomocy z góry dziękuję!

Ten post edytował carambas 23.03.2009, 12:35:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(carambas @ 23.03.2009, 10:00:04 ) *
Przepiszę go tu dla leniwych:

Daruj sobie taki tekst

Nie szybciej i łatwiej wykorzystać do tego celu curla?
Go to the top of the page
+Quote Post
carambas
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.03.2009

Ostrzeżenie: (0%)
-----


poszedłem za Twoją radą (dzięki za szybką podpowiedź)

Oto co przekazuję jako parametr do curl (dump z Zenda):
CODE
array(8) {
["from"] => string(4) "ktos"
["text"] => string(5) "adfaf"
["username"] => string(6) "intelli_login"
["password"] => string(6) "intelli_haslo"
["type"] => string(1) "5"
["to"] => string(11) "48501000000"
["plik1"] => string(32) "@./gifs/1237803240-zrobsobie.gif"
["plik2"] => string(17) "@./gifs/tresc_tmp"
}


text to tamat MMSa. W ".gifs/tresc_tmp" zapisuję treść główną MMS (intelli chce, żeby to było w pliku to robię w pliku, żeby curl mógł sobie z tym odpowiednio poradzić).

Polecenia curl:

CODE
$ch = curl_init('http://www.intellisoftware.co.uk/smsgateway/default.aspx');
//curl_setopt($ch, CURLOPT_CRLF, 1); // <- to jest zakomentowane
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);


jak widać szablonowe, ściągnięte z sieci, niby sprawdzone.

Ale nie działa. Dalej jest "request invalid".

W dodatku jak odkomentuję linijkę, która powyżej jest zaznaczona // treść linijki // to dostaję błąd "ERR: NO PASSWORD", chociaż hasło jest podawane.

Dodam, że nazwy elementów tablicy z dumpa powyżej odpowiadają nazwom pól, które są wymagane przez intelli.


Ktoś może wie co robię źle? Próbowałem znaleźć sposób, żeby zobaczyć co wysyła curl, ale nie znalazłem takiej opcji.

Pozdrawiam

Ten post edytował carambas 23.03.2009, 11:20:15
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Zobacz sobie opcje
CURLOPT_HTTPHEADER na http://pl.php.net/curl_setopt

A zobaczysz co ci wysyła curl robiąc sobie plik testowy mniej więcej o takiej treści
  1. <?php
  2. print_r($_SERVER);
  3. ?>

I curlem możesz go wywoływać.

Ten post edytował wookieb 23.03.2009, 11:26:08
Go to the top of the page
+Quote Post
carambas
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.03.2009

Ostrzeżenie: (0%)
-----


Dzięki za podpowiedź z plikiem. Świetny sposób testowania. Dzięki temu już wiem, że jak ustawię CURLOPT_CRLF to czyści mi zapytanie zupełnie.



Zapytanie, które wysyłam w postaci tabelki:
CODE

array(8) {
["from"] => string(5) "adfaf"
["text"] => string(5) "fafaf"
["username"] => string(6) "intelli_login"
["password"] => string(6) "intelli_haslo"
["type"] => string(1) "5"
["to"] => string(11) "48555433222"
["plik1"] => string(71) "@/var/www/eworkspace/crmsms/trunk/public//gifs/1237805374-zrobsobie.gif"
["plik2"] => string(55) "@/var/www/eworkspace/crmsms/trunk/public/gifs/tresc_tmp"
}



Wynik, który otrzymuję w pliku test.php (print_r($_POST); print_r($_FILES)(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
CODE

Array ( [from] => adfaf [text] => fafaf [username] => intelli_login [password] => intelli_haslo [type] => 5 [to] => 48555433222 )
Array ( [plik1] => Array
( [name] => 1237805374-zrobsobie.gif [type] => image/gif [tmp_name] => /tmp/php4JB5pM [error] => 0 [size] => 4637 )
[plik2] => Array
( [name] => tresc_tmp [type] => application/octet-stream [tmp_name] => /tmp/phpfYOKLs [error] => 0 [size] => 41 )
)


Jak widać, wygląda to zupełnie poprawnie.

Odpowiedź tego cholernego intelli:
ERR:INVALID_REQUEST


Kod, którym wysyłam

CODE

$ch = curl_init('http://localhost/test.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
$ch = curl_init('http://www.intellisoftware.co.uk/smsgateway/default.aspx');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
if (curl_errno($ch)) {
echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
}


Kod wręcz zdublowany. curl_errno() nie zwraca błędów.


Wysyłał ktoś kiedyś mmsy przez intelli? SMSy działają jak trzeba.

Pzdr!
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Zobacz jeszcze te nagłówki co pisałem. Może w nagłówkach im coś nie pasuje.
A jeżeli to nie pomoże to pisz do nich (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Sproóbuj jeszcze dac
Kod
curl_setopt($ch, CURLOPT_HTTPHEADERS,array('Content-Type: multipart/form-data'));


Ten post edytował wookieb 23.03.2009, 12:11:49
Go to the top of the page
+Quote Post
carambas
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.03.2009

Ostrzeżenie: (0%)
-----


aha, nagłówki.

Nie napisałem, że znalazłem informację, jak wyświetlić część zapytania wysłanego przez curl (nagłówki właśnie).

Służy do tego funkcja
curl_getinfo($ch, CURLINFO_HEADER_OUT)
ale przed wykonaniem curl_exec($ch) należy umieścić jeszcze:
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

(oczywiście nie ma tego w dokumentacji na php.net, jest w komentarzach użytkowników pod nią;]).

Wg tychże nagłówków content-type jest dobry, oto dump z niego:
CODE
POST /smsgateway/default.aspx HTTP/1.1
Host: www.intellisoftware.co.uk
Accept: */*
Content-Length: 5617
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------d8846e12d61c



Nie pozostaje mi nic innego jak ścigać intelli. Wystosowałem do nich gniewną notę z opisem moich katuszy nad tym elementem i zobaczymy.

Dzięki za szybkie i sprawne podrzucanie pomysłów.

ADDED:

zmieniłem podtytuł tematu, żeby łatwiej potem było szukać komuś z podobnymi problemami. Choć wątpię, żeby dużo osób używało Intelli.

Ten post edytował carambas 23.03.2009, 12:36:07
Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(carambas @ 23.03.2009, 12:34:56 ) *
Wystosowałem do nich gniewną notę z opisem moich katuszy nad tym elementem i zobaczymy.


A na końcu może się okazać, że czegoś nie doczytałeś więc ten gniew warto zostawić na sam koniec.
Go to the top of the page
+Quote Post
carambas
post
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 23.03.2009

Ostrzeżenie: (0%)
-----


temat można zamknąć.

ROZWIĄZANIE:

zapytania prawdopodobnie wysyłałem prawidło za każdym razem. Konto było nie tego typu...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:05