2017-01-23 4 views
0

Ich habe mit Wiederaufbau this javascript file in rubin beauftragt worden, aber ich bin immer eine Antwort, die (für mich) nicht sinnvoll ist der Fehler:API reagiert nicht wie erwartet

{"api_error_code"=>1, "message"=>"Parameter 'username_or_email' is required.", "code"=>"API_ERROR", "target"=>"<webapp.resources.user_session_resource.UserSessionResource object at 0xb8e2a90>", "http_status"=>400} 

Es ist nicht Sinn machen, weil ich in der Tat bin Versorgung der username_or_email Parameter wie man hier sehen kann, wo ich eine Puts auf den Körper zu tun, bevor sie den Antrag:

{"source_url":"/login/","data":"{\"options\":{\"username_or_email\":\"[email protected]\",\"password\":\"testpassword\"},\"context\":{}}","module_path":"App()>LoginPage()>Login()>Button(class_name=primary, text=Log In, type=submit, size=large)"} 

Es ist auch keine Rolle scheint, wie ich die Nutzlast gesetzt, entweder indem Sie @curl.post_body = payload oder @curl.http_post(payload) odertunantwortet es nur mit dem gleichen Fehler. Übrigens ist @curl eine Instanz von Curl::Easy.

Ich habe die JSON-Datenanforderung wie das Original hat es so, was ist los?

Hier ist die Anfrage so weit:

require_relative "curb_dsl" 
require 'json' 
module Pin 
    class Client 
    Login_URL = "https://www.pinterest.com/resource/UserSessionResource/create/" 
    Repin_URL = "https://www.pinterest.com/resource/RepinResource/create/" 
    include Curb_DSL 
    class << self 
     def login(username_or_email, password) 
     self.new do 
      set_uri Login_URL 
      header 'Accept', 'application/json, text/javascript, */*; q=0.01' 
      header 'Accept-Language', 'en-US,en;q=0.5' 
      header 'Cache-Control', 'no-cache' 
      header 'DNT','1' 
      header 'Host', 'www.pinterest.com' 
      header 'Origin', 'https://www.pinterest.com' 
      header 'Referer', 'https://www.pinterest.com/' 
      header 'User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36' 
      header 'X-APP-VERSION', '18733c1' 
      header 'X-CSRFToken', 'K4C0QUu35Eoq1xjajbMluw7hOKibpQSW' 
      header 'X-NEW-APP', '1' 
      header 'X-Pinterest-AppState', 'active' 
      header 'X-Requested-With', 'XMLHttpRequest' 
      set_cookies({ ":_auth" => '0',csrftoken: 'K4C0QUu35Eoq1xjajbMluw7hOKibpQSW'}) 

      set_payload({ 
      source_url: "/login/", 
      data: { 
       options: { 
       username_or_email: username_or_email, 
       password: password 
       }, 
       context: {} 
      }.to_json, 
      module_path: "App()>LoginPage()>Login()>Button(class_name=primary, text=Log In, type=submit, size=large)" 
      }) 
      set_type_converter -> (payload) {payload.to_json} 
      set_error_handler -> { 
      JSON.parse(body)['resource_response']['error'].to_s 
      } 
      puts post_body 
      post 
      @csrftoken = resp_cookies['csrftoken'] 
     end 
     end 
    end 
    end 
end 
+0

Setzen Sie einen Haltepunkt in Ihren Controller und prüfen Sie den Wert von 'params'. Stellen Sie sicher, dass der Schlüssel der obersten Ebene vorhanden ist. –

+0

umm was? Welcher Controller? – Thermatix

Antwort

0

Ok, also habe ich das Problem, nachdem das Gleiche wie die JavaScript-Analyse aber in PHP geschrieben (link) Ich erkannte, dass ich die Daten aufhängte falsch, ich brauchte die Daten zu senden, nicht als JSON, sondern als Abfrage-String (k = v & k = v) zu ändern:

set_type_converter -> (payload) {payload.to_json} 

zu

set_type_converter -> (payload) {query_params(payload)} 

die im post_body Wesen ergibt:

source_ury=%2Flogin%2F&data=%7B%22options%22%3A%7B%22username_or_email%22%3A%22testusername%40host.com%22%2C%22password%22%3A%22testpassword%22%7D%2C%22context%22%3A%7B%7D%7D&module_path=App%28%29%3ELoginPage%28%29%3ELogin%28%29%3EButton%28class_name%3Dprimary%2C+text%3DLog+In%2C+type%3Dsubmit%2C+size%3Dlarge%29 

Es scheint das Problem gelöst zu haben.

Verwandte Themen