Was ist falsch an dieser HTTP-POST-Anfrage?

7

Ich versuche, einen Server mit dem Sulley-Fuzzing-Framework zu fuzzeln.

Ich beobachte den folgenden Stream in Wireshark. Der Fehler spricht von einem Problem mit der JSON-Analyse. Wenn ich jedoch dieselbe HTTP-POST-Anforderung mit der Postman-Erweiterung von Google Chrome versuche, ist dies erfolgreich.

Kann jemand bitte erklären, was an dieser HTTP-POST-Anfrage falsch sein könnte? Der JSON scheint gültig zu sein.

POST /restconf/config HTTP/1.1
Host: 127.0.0.1:8080
Accept: */*
Content-Type: application/yang.data+json
{ "toaster:toaster" : { "toaster:toasterManufacturer" : "Geqq", "toaster:toasterModelNumber" : "asaxc", "toaster:toasterStatus" : "_." }}


HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
Content-Type: */*
Transfer-Encoding: chunked
Date: Sat, 07 Jun 2014 05:26:35 GMT
Connection: close

152
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
    <error>
        <error-type>protocol</error-type>
        <error-tag>malformed-message</error-tag>
        <error-message>Error parsing input: Root element of Json has to be Object</error-message>
    </error>
</errors>

0
großer Junge
quelle

Antworten:

3

Es war die Eigenschaft "Content-Length", die im Header fehlte, und der Server hielt sie für obligatorisch, was meiner Meinung nach nicht obligatorisch sein sollte.

Funktioniert nach dem Hinzufügen der "Inhaltslänge" zum Header wie ein Zauber.

großer Junge
quelle
2
In Abschnitt 4.4 von RFC 2616 heißt es: Wenn eine Anforderung einen Nachrichtentext enthält und keine
Inhaltslänge angegeben ist, SOLLTE
1

Basierend auf Ihrer Nachricht sollte es eine leere Zeile vor dem Text der POST-Anforderung sein. Können Sie versuchen, eine hinzuzufügen?

Es ist möglich, dass der Server diese Anforderung ohne Text und mit einem Header wie folgt sieht:

{ "toaster:toaster" : value

das würde den Fehler erklären.

Cédric Couralet
quelle
Funktioniert immer noch nicht. :(
Bigboy
0

Vielleicht liegt es am "Content-Type" -Header. Wenn der Server so konfiguriert ist, dass er nur "application / json" akzeptiert, gibt er möglicherweise diesen Fehlercode zurück. Es sollte jedoch "415 Unsupported Media Type" gemäß RFC2616 zurückgeben .

Dies ist nur eine Vermutung, aber Sie können versuchen, den Header "Content-Type" in "application / json" zu ändern.

Benjamin
quelle
Nee. Es wurde versucht, den "Inhaltstyp" in "application / json" zu ändern. Immer noch der gleiche Fehler.
Bigboy
0

Möglicherweise fehlt zwischen Ihrem letzten Header und der Nutzlast Ihrer Anfrage eine CRLF.

dh du hast

POST /restconf/config HTTP/1.1
Host: 127.0.0.1:8080
Accept: */*
Content-Type: application/yang.data+json
{ "toaster:toaster" : { "toaster:toasterManufacturer" : "Geqq", "toaster:toasterModelNumber" : "asaxc", "toaster:toasterStatus" : "_." }}

und es sollte sein

POST /restconf/config HTTP/1.1
Host: 127.0.0.1:8080
Accept: */*
Content-Type: application/yang.data+json

{ "toaster:toaster" : { "toaster:toasterManufacturer" : "Geqq", "toaster:toasterModelNumber" : "asaxc", "toaster:toasterStatus" : "_." }}
joelc
quelle