[HTTPMOD] HTTP/1.1 411 Length Required

Begonnen von Loredo, 24 November 2015, 00:21:17

Vorheriges Thema - Nächstes Thema

Loredo


Hallo Stefan, hallo Rudi,


ich versuche per HTTPMOD einen API Aufruf per POST auf https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/
Allerdings bekomme ich die Meldung, dass die Content-Length im Request-Header wohl fehlt:


HTTP/1.1 411 Length Required
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Mon, 23 Nov 2015 23:11:23 GMT
Connection: close
Content-Length: 344


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <HTML><HEAD><TITLE>Length Required</TITLE> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> <BODY><h2>Length Required</h2> <hr><p>HTTP Error 411. The request must be chunked or have a content length.</p></BODY></HTML>


Schickt HttpUtils da keine mit? Kann ich das irgendwie beeinflussen?


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Wenn ich meine Content-Length selbst berechne und als requestHeader.* "Content-Length: 167" angebe, funktioniert die Abfrage.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Content-Length wird dann gesetzt, falls man Daten uebergibt.
In diesem Fall wird auch Content-Type gesetzt.
Du kannst es selbst mit einem Request nach z.Bsp. http://requestb.in/ verifizieren.

Loredo

Ich übergebe ja Daten per requestData und laut Logfile werden die auch von HTTPMOD an HttpUtils übergeben.
Das sieht man auch daran, dass die Daten ja auch entsprechend verwendet werden, wenn ich Content-Length selbst explizit setze, denn dann erhalte ich auf meine POST Anfrage auch die erwartete Antwort. Ohne Content-Length selbst zu setzen erhalte ich genannte Fehlermeldung auf meine POST Anfrage.


Mit requestb.in konnte ich das grad nicht nachstellen, weil meine Anfragen dort irgendwie nicht ankommen (obwohl HTTPMOD die erfolgreiche Rückmeldung in den INTERNALS zeigt).
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Hier noch ein List:




Internals:
   BUSY       0
   CHANGED
   DEF        https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/ 590
   GetSeq     0
   HTTPHEADER
   Interval   590
   LASTSEND   1448378271.54588
   MainURL    https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/
   NAME       BingTTS
   NR         313
   STATE      intialized
   TRIGGERTIME 1448378841.23156
   TRIGGERTIME_FMT 2015-11-24 16:27:21
   TYPE       HTTPMOD
   addr       https://datamarket.accesscontrol.windows.net:443
   buf        HTTP/1.1 411 Length Required

Content-Type: text/html; charset=us-ascii

Server: Microsoft-HTTPAPI/2.0

Date: Tue, 24 Nov 2015 15:17:50 GMT

Connection: close

Content-Length: 344




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">

<HTML><HEAD><TITLE>Length Required</TITLE>

<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>

<BODY><h2>Length Required</h2>

<hr><p>HTTP Error 411. The request must be chunked or have a content length.</p>

</BODY></HTML>



   code       411
   conn
   data       grant_type=client_credentials&scope=http%3a%2f%2fapi.microsofttranslator.com&client_id=MEINECLIENTID&client_secret=MEINGEHEIMERKEY%3d
   displayurl https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/
   header
   host       datamarket.accesscontrol.windows.net
   httpheader HTTP/1.1 411 Length Required

Content-Type: text/html; charset=us-ascii

Server: Microsoft-HTTPAPI/2.0

Date: Tue, 24 Nov 2015 15:17:50 GMT

Connection: close

Content-Length: 344
   hu_blocking 0
   hu_filecount 2
   ignoreredirects 0
   loglevel   4
   path       /v2/OAuth2-13/
   protocol   https
   redirects  0
   timeout    2
   url        https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/
   CHANGETIME:
   QUEUE:
   Readings:
   Request:
     data       grant_type=client_credentials&scope=http%3a%2f%2fapi.microsofttranslator.com&client_id=MEINECLIENTID&client_secret=MEINGEHEIMERKEY%3d
     header
     ignoreredirects 0
     retryCount 0
     type       Update
     url        https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/
   Sslargs:
Attributes:
   DbLogExclude .*
   enableControlSet 1
   event-on-change-reading state
   get01HdrExpr return $old . " " . ReadingsVal($name,"access_token","0");
   get01Header.* Authorization: Bearer
   get01Name  tts
   get01URL   http://api.microsofttranslator.com/V2/Http.svc/Speak?language=de&format=audio/mp3&options=MaxQuality&appid=&text=$val
   reading01Name access_token
   reading01Regex "access_token"\w*:\w*"([\w%.=\-_&:/]+)
   reading02Name expires_in
   reading02Regex "expires_in"\w*:\w*"([\w%.=\-_&:/]+)
   reading03Expr urlDecode($val)
   reading03Name scope
   reading03Regex "scope"\w*:\w*"([\w%.=\-_&:/]+)
   requestData.* grant_type=client_credentials&scope=http%3a%2f%2fapi.microsofttranslator.com&client_id=MEINECLIENTID&client_secret=MEINGEHEIMERKEY%3d
   userattr   DbLogExclude enableControlSet event-on-change-reading get01DatExpr get01Data get01HdrExpr get01Header.* get01Name get01URL get01URLExpr reading01Expr reading01Name reading01Regex reading02Expr reading02Name reading02Regex reading03Expr reading03Name reading03Regex reading04Expr reading04Format reading04Name reading04Regex requestData.* requestHeader.*



Wenn man dort das Attribut requestHeader.* "Content-Length: 167" selbst hinzufügt, dann funktioniert die Anfrage.
Solltest du damit also nachstellen können (auch ohne gültige API Daten).
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Das Problem ist, dass HTTPMOD einen leeres header mitgibt, und HttpUtils das mit einem \r\n zu den restlichen Daten hinzufuegt. Das Ergebnis ist eine Leerzeile im Header, was nicht regelkonform ist.
Ich habe HttpUtils modifiziert, damit solche header ignoriert werden. Ab morgen per update.

Loredo

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Ich bin nicht sicher, obs jetzt an dem Fix liegt. Aber ich erhalte jetzt zwar eine Content-Length, aber keine Antwort mehr vom Server:




2015.11.27 19:50:21 3: BingTTS: Read callback: request type was Update,
header: HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
request-id: 64000b19-de4e-4f83-a9be-8343cff29982
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains
Date: Fri, 27 Nov 2015 18:40:27 GMT
Connection: close
Content-Length: 604, buffer empty,
Error read from to https://datamarket.accesscontrol.windows.net:443 timed out



Von meinem Rechner aus kann ich den Server per Browser ansprechen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER