Je tente de créer une application VB.net qui récupérera divers utilisateurs de Facebook via leur méthode de requêtes par lots API Graph. Mon problème semble être dans l'exécution de la demande réelle. Lorsque j'essaie de récupérer la réponse, je reçois une erreur 400 du serveur disant "Bad Request". Je ne suis pas sûr si cela signifie que je forme mal le corps de la demande, ou si je le corrige dans le code.Requêtes par lots Facebook
Voici mon code de demande:
Dim sURL As String
sURL = "https://graph.facebook.com"
Dim wrGETURL As WebRequest
wrGETURL = WebRequest.Create(sURL)
wrGETURL.Method = "POST"
wrGETURL.Proxy = WebRequest.DefaultWebProxy
Dim reqStream As IO.Stream = wrGETURL.GetRequestStream()
Dim access_token As String = "..." ' Access token removed, but it is valid
Dim jsonReq As String = """access_token"": """ + access_token + """"
jsonReq = jsonReq + """batch"": ["
AddBatchRequest(jsonReq, "[email protected]")
AddBatchRequest(jsonReq, "[email protected]")
jsonReq = jsonReq + "]"
Dim enc As New System.Text.UTF8Encoding()
Dim jsonBytes As Byte() = enc.GetBytes(jsonReq)
reqStream.Write(jsonBytes, 0, jsonBytes.Length)
reqStream.Close()
Dim oLabel As Label = output_label
Dim objStream As Stream
Try
objStream = wrGETURL.GetResponse.GetResponseStream() '<<<<Crashes here
Dim objReader As New StreamReader(objStream)
Dim sLine As String = ""
Dim i As Integer = 0
Dim ostr As String = ""
Do While Not sLine Is Nothing
i += 1
sLine = objReader.ReadLine
If Not sLine Is Nothing Then
ostr = ostr + sLine
End If
Loop
oLabel.Text = ostr
Catch ex As Exception
oLabel.Text = ex.Message
End Try
Private Sub AddBatchRequest(ByRef json As String, ByVal email As String)
If json.EndsWith("}") Then
json = json + ","
End If
json = json + "{""method: ""GET"", ""relative_url"": ""search?q=" + email + "&type=user""}"
End Sub
J'ai essayé une tonne de variations sur la façon de former le corps de chaîne, mais aucun d'entre eux travaillent, me conduit à croire que je ne suis pas ajoutais la corps correctement.
Deux nitpicks: d'abord, utilisez toujours un bloc 'Using 'autour de vos flux au lieu de les fermer manuellement. Deuxièmement, 'Not x Is y' peut (et devrait!) Être raccourci en' x IsNot y'. –
Je suis vraiment nouveau sur VB.net, la plupart de mon expérience est en c/C++, donc je ne connais pas beaucoup la syntaxe spéciale de VB. Que fait le bloc 'Using 'par rapport à la fermeture manuelle du flux? –
La fermeture manuelle n'aura pas lieu si une exception est levée (ou si vous laissez la fonction autrement) alors que le flux est ouvert. 'Using 'fermera le flux, peu importe quoi. –