首页 > 解决方案 > 如何将 Postman 的 POST 请求转换为 R 中的 httr:POST

问题描述

我想向 facebook.com.api.graphql 页面发送 POST 请求并接收包含事件数据的响应。我使用 Postman 管理向https://www.facebook.com/api/graphql发送 POST 请求,并在正文表单数据中使用以下键和值:

关键价值

变量:{"pageID":"209194109147358","count":10}

doc_id:2455863461165494

邮递员截图

回复:

{
   "data": {
      "page": {
         "upcoming_events": {
            "edges": [
               {
                  "is_hidden_on_profile_calendar": false,
                  "is_added_to_profile_calendar": false,
                  "node": {
                     "id": "2416302635352362",
                     "startTimestampForDisplay": 1589817600,
                     "time_range": {
                        "start": "2020-05-18T09:00:00-0700"
                     },
                     "timezone": "America/Los_Angeles",
                     "happensOnSingleDay": false,
                     "childEvents": {
                        "count": 0
                     },
                     "is_event_draft": false,
                     "scheduled_publish_timestamp": 0,
                     "shortTimeLabel": "18. maj - 22. maj",
                     "shortDateLabel": "Man. 18. maj",
                     "suggested_event_context_sentence": {
                        "text": "15 g\u00e6ster"
                     },
                     "event_place": {
                        "__typename": "FreeformPlace",
                        "contextual_name": "Minneapolis Convention Center",
                        "id": "2700549666678444"
                     },
                     "is_canceled": false,
                     "imported_source_name": null,
                     "preassigned_discount_note": null,
                     "name": "DrupalCon Minneapolis",
                     "has_child_events": false,
                     "event_buy_ticket_url": null,
                     "can_viewer_purchase_onsite_tickets": false,
                     "event_viewer_capability": {
                        "is_viewer_admin_no_business_permissions": false,
                        "can_viewer_edit": false,
                        "can_viewer_share": false,
                        "can_viewer_create_repeat_event": false,
                        "canViewerWatch": false
                     },
                     "tickets_type": "ONSITE_TICKET",
                     "canViewerJoin": false,
                     "isPast": false,
                     "connectionStyle": "INTERESTED",
                     "eventID": "2416302635352362",
                     "watchStatus": "UNWATCHED",
                     "canJoin": false,
                     "__typename": "Event"
                  },
                  "cursor": "AQHR-CDTanvfocAXPrNpthiQPd38IxkmIM-X8dsCgvNaS-5GgVPPY1r4B2-G4i64oqoR5V7uQ__B-uZKHzTyd8g5wg"
               }
            ],
            "page_info": {
               "has_next_page": false,
               "end_cursor": "AQHRGvYb3Bp1vBnmF4aHTUuT-FsPomUGSber11DP0LlfpANZ4-hclA6lhKINQ6Av31TbDFGi0YWTQSsiU4Clvggu8A"
            }
         },
         "id": "209194109147358",
         "viewer_profile_permissions": [

         ],
         "admin_info": null
      }
   },
   "extensions": {
      "is_final": true,
      "dtsg_token": null
   }
}

我更喜欢在 R 中处理收集的数据,因此想使用 httr:POST() 而不是 Postman 发送 POST 请求。到目前为止我的尝试:

url <- "https://www.facebook.com/api/graphql"
params <- list()
params$variables <-  '[{"page_id":"209194109147358", "count":"10"}]'
params$doc_id <- "2455863461165494"
r <- httr::POST(url,body = params, encode = "json")
r

给我以下响应(截断)

Response [https://www.facebook.com/unsupportedbrowser]
  Date: 2020-02-10 14:31
  Status: 200
  Content-Type: text/html; charset="utf-8"
  Size: 58.4 kB
<!DOCTYPE html>
<html lang="da" id="facebook" class="no_js">
<head><meta charset="utf-8" /><meta name="referrer" content="default" id="meta_referrer" /><script>window._cstart=+new Date();</script><sc...
<link type="text/css" rel="stylesheet" href="https://static.xx.fbcdn.net/rsrc.php/v3/ym/l/0,cross/h4AfnhSpX0c.css?_nc_x=Ij3Wp8lg5Kz" data-...
<link type="text/css" rel="stylesheet" href="https://static.xx.fbcdn.net/rsrc.php/v3/yw/l/0,cross/6oJnmlkR2c_.css?_nc_x=Ij3Wp8lg5Kz" data-...
<link type="text/css" rel="stylesheet" href="https://static.xx.fbcdn.net/rsrc.php/v3/yD/l/0,cross/tI6W6dcWoG6.css?_nc_x=Ij3Wp8lg5Kz" data-...
<script src="https://static.xx.fbcdn.net/rsrc.php/v3/y8/r/6HlB7NWcMJY.js?_nc_x=Ij3Wp8lg5Kz" data-bootloader-hash="J598A"></script>
<script>requireLazy(["gkx"],function(gkx){gkx.add({"676837":{"result":false,"hash":"AT6VREokr3BzfdNj"},"676940":{"result":false,"hash":"AT...
<script>requireLazy(["Bootloader"],function(Bootloader){Bootloader.setResourceMap({"02wPs":{"type":"js","src":"https:\/\/static.xx.fbcdn.n...
<script>requireLazy(["InitialJSLoader"], function(InitialJSLoader) {InitialJSLoader.loadOnDOMContentReady(["SkivO","Gld+B","02wPs","MzCre"...
...

R/httr 中的响应与我从 Postman 得到的不同。我是否错误地设置了参数,或者是否有其他原因导致它在 Postman 中有效,但在 R 中无效?

任何帮助深表感谢。

标签: rpostpostmanhttr

解决方案


推荐阅读