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

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.


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.


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.


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" : "_." }}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.