Problemi GET (http) su modulo 3g

Salve a tutti,

sto ormai lottando da giorni cercando di risolvere un errore nella chiamata GET fatta attraverso un moulo 3g (Cooking Hack che usa SIM5218E http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-3g-gprs-gsm-gps)

Eseguo, secondo quanto specificato nei comandi AT la seguente sequenza

  1. AT+CHTTPACT="wooow.altervista.org",80 (e mi risponde: +CHTTPACT: REQUEST)
    2)GET /upload_sensor.php?light=100&temp=50&move=100
    HTTP/1.1
    Host:wooow.altervista.org

e mi da errore (+CHTTPACT: 227)

la stessa GET la eseguo correttamente in un altro progetto che usa arduino con scheda ethernet

Qualcuno ha idee su cosa non funziona?

Grazie1000
Matteo

aggiungi il campo
Content-Length: 0
dopo Host, poi dicci se funziona :slight_smile:

ps: soluzione da 3° risultato di google scrivendo "chttpact 227"

No, portruppo lo avevo provato ma niente....

e se usi come host un sito "affidabile" come google, e richiedi la pagina principale, funziona?
perchè magari qualche altro header è richiesto

apsetta, ma http/1.1 lo scrivi a capo? in teoria va di seguito all'URI

fatto anche quello (GET /upload_sensor.php?light=100&temp=50&move=100 HTTP/1.1) ma niente
Ho provato usando google ma anche qui cose strane:

Se faccio solo la GET /search?q=arduino (senza HTTP/1.1 e Host:....) funziona (nel senso che esce il risultato
Se invece metto tutto (HTTP, Host ecc.) torno all'errore di prima.

Cmq ripeto che usando la stessa GET su Ethernet Shield, tutto funziona

...mistero

dovresti creare un server che ascolta la porta 80 del tuo pc (quindi un finto web server) e analizzare cosa REALMENTE spedisce arduino..

una specie di cosa simile

Mi sembra una buona idea, spero di capirci qualcosa.....

Cominciano ad emergere aspetti:
La GET per motivi non chiari arriva ma senza Host header (anche se specifico nella chiamata)
Per motivi che sto cercando di capire la mia pagina (che è su altervista) mi risponde picche fornendomi un 404.
Se faccio lo stesso (quindi Get senza HH) su altro sito/pagina (es google con /search?q=arduino) mi funziona...

forse devo gestire questa modalità di chiamata sulla mia pagina/sito?

no, non è un'impostazione di pagina ma del server web, cosa su cui non hai potere.

devi sistemare la libreria.

Mi sa che sulla libreria non ho possibilità di incidere (roba di SIMCom...China)

Sembra che arrivi quindi la chiamata parta con i parametri giusti (GET /upload....php HTTP/1.1) ma arriva solo fino al primo (GET /upload...php). Proverò a vedere se dipende da una codifica (ASCII o roba de genere) dello

no, posta il codice completo che stai facendo un grosso casino da qualche parte. Se usi i comandi AT, allora potresti star costruendo in modo errato la stringa. Se stai usando una libreria esterna allora al 99% stai usando una libreria a partire dai sorgenti, dubito che tu sia in grado di linkare un oggetto precompilato al tuo compilato arduino prima di upparlo (poi magari mi sbaglio, eh)

scusa ma non ho capito cosa intendi dire :wink:

lascia stare, e posta il codice che hai scritto, così cerchiamo di capire cosa stai facendo e dov'è l'errore.

Ma il codice incriminato sono in realtà dei comandi AT per la scheda 3G(http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-3g-gprs-gsm-gps)

Erano quelli del primo post e comunque devo replicare una chiamata a codice (PHP) su sito (Altervista)

at+chttpact="wooow.altervista.org",80
GET /upload_sensor.php?light=100&temp=50&move=100 HTTP/1.1
host: wooow.altervista.org

ma non funziona (neanche aggiungendo altre eventuali parti tipo Content-Length: 0 o altro)...mi da un Bad Request
la stessa chiamata funziona su Sketch con scheda ethernet....

ok, stai usando direttamente i comandi AT.

esattamente com'è il codice che usi per creare la stringa di comando?

uso Hyperterminal (ahime WIN)....

http://www.cooking-hacks.com/forum/viewtopic.php?f=20&t=2991&sid=71c4d93fd6331c2ee0fa29fc87f73c9b&start=10

try :

  1. AT+CGSOCKCONT=1,"IP","ibox.tim.it
    2)AT+CHTTPACT="www.google.it",80
  2. GET /index.html HTTP/1.1
    Host: www.google.it
    Content-Length: 0

ctrl+z

in hyperterminal or other but with linefeed in your get

Quella su Google funziona correttamente

La stessa cosa fatta su altervista restituisce un 400 - Bad Request

at+chttpact="wooow.altervista.org",80
GET /upload_sensor.php?light=100&temp=50&move=100 HTTP/1.1
Host: wooow.altervista.org
Content-Length: 0

ctrl+z

apetta, stai già complicando tutto inserendo &, =, ? etc...
inizia a vedere se aleno la pagina principale del tuo sito riesci ad ottenerla. se no, vuol dire che manca qualche header che i server altervista vogliono, e ci tocca capire quale.

la stessa chiamata funziona su Sketch con scheda ethernet....

ah, questa mi era sfuggita, e quindi rafforza l'idea che ci sia un errore nel charset, ovvero una lettera (per esempio & o = o ?) viene "scritta" usando una tabella diversa da quella ascii e quindi male interpretata, generando così una bad request.

Provato anche con home.htm ma non cambia.

Anch'io ho la sensazione che sia un problema di codifica dei caratteri e forse sullo space (tra url e header) infatti usando il servizio che mi avevi consigliato (http://web-sniffer.net/) ho un coportamento che "mi torna" con la tesi:

Se inserisco url di una pagina (es: http://wooow.altervista.org/home.htm oppure http://wooow.altervista.org//upload_sensor.php?light=100&temp=50&move=100) ottengo

  1. nel caso di HTTP: HTTP/1.1 o 1.0: risposta corretta

  2. nel caso Without Host Header: 404

il caso due torna con una sequenza AT come di seguito

at+chttpact="wooow.altervista.org",80
GET /upload_sensor.php?light=100&temp=50&move=100
Host: wooow.altervista.org