2017-02-21 6 views
1

私は古典的なASPで作られたかなり古いプロジェクトに投げ込まれました。私たちのニーズに合わせて、いくつかのデータを更新するには、単純なcurl -requestを作成する必要があります。PATCH /古典的なASPでカールする投稿

私はASPには新しく、同様の問題を探しました。

機能:私はあなたの助けを必要とし、ここで

How can I post data using cURL in asp classic?

私はできるだけ多くを適応させることを試みたが、私は重要なことが欠けてるように思えると:私はここで、この 質問につまずきました私のファイルで

public function makeCurlRequest(strMethod) 

    Dim http: Set http = Server.CreateObject("WinHttp.WinHttpRequest.5.1") 
    Dim privateKey 
    privateKey = "abc def" 
    Dim url: url = "https://sandbox.uberall.com/api/locations/322427?private_key=" & privateKey 
    Dim data: data = "{""location"":{""openingHours"":[{""dayOfWeek"":1,""from1"":""07:01"",""to1"":""07:02""}]}}" 

    'method needs to be PATCH 
    With http 
     Call .Open(strMethod, url, False) 
     Call .SetRequestHeader("Content-Type", "application/json") 
     Call .Send(data) 
    End With 

    If Left(http.Status, 1) = 2 Then 
     response.write("updated") 
     response.end() 
    Else 
     'Output error 
     Call Response.Write("Server returned: " & http.Status & " " & http.StatusText) 
    End If 

end function 

を.aspファイル、私は単にmakeCurlRequest("PATCH")を呼び出します。 これは確かに "更新された"と表示されるので、私は200を取得していると推測しますが、フィールドは更新されません。

uberall APIに関しては、location -objectが必要です。これは、現在のところ、現在data -variableになっています。 (JSON検証ツールでチェック)。

は、読みやすくするため、私もインデントのコードを提供します、多分ここでエラーです:

{ 
    "location":{ 
     "openingHours":[ 
     { 
      "dayOfWeek":1, 
      "from1":"07:01", 
      "to1":"07:02" 
     } 
     ] 
    } 
} 

IDが正しい、私はすでにそれをダブルチェック。多分、ペイロードは間違っていますか?何が問題なのでしょうか?このアプローチの代わりにdataを用意する必要がありますか?

+1

ペイロードが間違っていると、ペイロードが間違っていた場合、APIは4XXの範囲内でステータス応答を返すことが期待されます。 APIをデバッグする最善の方法は、Fiddlerを使用して、RAW要求と応答が送受信されていることを確認することです。 – Lankymart

+0

これまでのコメントは読んでいたはずです - **ペイロードが間違っていれば**は成功しません。 – Lankymart

答えて

1

Uberall Tutorials Page

location

オブジェクトのカプセル化は必要ではないかのように見えに例を見てみると、代わりのコードで

{ 
    "openingHours":[ 
    { 
     "dayOfWeek":1, 
     "from1":"07:01", 
     "to1":"07:02" 
    } 
    ] 
} 

状体の構造であることがdata変数を変更します;

Dim data: data = "{""openingHours"":[{""dayOfWeek"":1,""from1"":""07:01"",""to1"":""07:02""}]}" 

は、私は、彼らがAPIのための素晴らしいされていない、要求の本体は構造化されることが予想方法を示した例を見つけることがマニュアルに周りに掘っていた認めなければなりません。また、ペイロードが間違っていた場合は、ペイロードに問題があったことを知るためにエラーを返すべきです。HTTP 400 Bad Requestの行に沿った何かが意味をなさないでしょう。

APIがすべてHTTP 200 OKを使用している可能性もあります。この場合、エラーが発生する可能性がありますので、テスト中にこのようなことを行うことができます。

Dim http: Set http = Server.CreateObject("WinHttp.WinHttpRequest.5.1") 
Dim privateKey 
privateKey = "abc def" 
Dim url: url = "https://sandbox.uberall.com/api/locations/322427?private_key=" & privateKey 
'Purposefully passing the wrong structure to see what is returned. 
Dim data: data = "{""location"":{""openingHours"":[{""dayOfWeek"":1,""from1"":""07:01"",""to1"":""07:02""}]}}" 

'method needs to be PATCH 
With http 
    Call .Open(strMethod, url, False) 
    Call .SetRequestHeader("Content-Type", "application/json") 
    Call .Send(data) 
End With 

'Not bothered about the status for now, just give me the response. 
Call Response.Write("Server returned: " & http.Status & " " & http.StatusText) 
Call Response.Write("Body: " & http.ResponseText) 
+1

あなたは完全に正しいです。カプセル化されました:)ありがとう! – DasSaffe

関連する問題