当我直接在终端中点击 cURL 时,此卷曲给出了异常响应。但是当我使用 postman、Python requests 或任何其他方式(如 wget、powershell 等)时,确实会出现 403 html 页面。
curl 'https://www.doordash.com/graphql/searchWithFilterFacetFeed?operation=searchWithFilterFacetFeed' \
-H 'authority: www.doordash.com' \
-H 'accept: */*' \
-H 'accept-language: en-US' \
-H 'content-type: application/json' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36' \
--data-raw $'{"operationName":"searchWithFilterFacetFeed","variables":{"cursor":"eyJvZmZzZXQiOjUwLCJ2ZXJ0aWNhbF9pZHMiOltdLCJjcm9zc192ZXJ0aWNhbF9wYWdlX3R5cGUiOiJHTE9CQUxfU0VBUkNIX1BBR0UiLCJwYWdlX3N0YWNrX3RyYWNlIjpbXSwibGF5b3V0X292ZXJyaWRlIjoiVU5TUEVDSUZJRUQiLCJpc19wYWdpbmF0aW9uX2ZhbGxiYWNrIjpudWxsLCJzb3VyY2VfcGFnZV90eXBlIjpudWxsLCJ2ZXJ0aWNhbF9uYW1lcyI6e319","filterQuery":"","query":"street food","isDebug":false},"query":"query searchWithFilterFacetFeed($cursor: String, $filterQuery: String, $query: String\u0021, $isDebug: Boolean, $fromFilterChange: Boolean, $serializedBundleGlobalSearchContext: String, $address: String) {\\n searchWithFilterFacetFeed(\\n cursor: $cursor\\n filterQuery: $filterQuery\\n query: $query\\n isDebug: $isDebug\\n fromFilterChange: $fromFilterChange\\n serializedBundleGlobalSearchContext: $serializedBundleGlobalSearchContext\\n address: $address\\n ) {\\n ...FacetFeedV2ResultFragment\\n __typename\\n }\\n}\\n\\nfragment FacetFeedV2ResultFragment on FacetFeedV2Result {\\n body {\\n id\\n header {\\n ...FacetV2Fragment\\n __typename\\n }\\n body {\\n ...FacetV2Fragment\\n __typename\\n }\\n layout {\\n omitFooter\\n __typename\\n }\\n __typename\\n }\\n page {\\n ...FacetV2PageFragment\\n __typename\\n }\\n header {\\n ...FacetV2Fragment\\n __typename\\n }\\n custom\\n logging\\n __typename\\n}\\n\\nfragment FacetV2Fragment on FacetV2 {\\n ...FacetV2BaseFragment\\n childrenMap {\\n ...FacetV2BaseFragment\\n __typename\\n }\\n __typename\\n}\\n\\nfragment FacetV2BaseFragment on FacetV2 {\\n id\\n childrenCount\\n component {\\n ...FacetV2ComponentFragment\\n __typename\\n }\\n name\\n text {\\n ...FacetV2TextFragment\\n __typename\\n }\\n images {\\n main {\\n ...FacetV2ImageFragment\\n __typename\\n }\\n icon {\\n ...FacetV2ImageFragment\\n __typename\\n }\\n background {\\n ...FacetV2ImageFragment\\n __typename\\n }\\n accessory {\\n ...FacetV2ImageFragment\\n __typename\\n }\\n custom {\\n key\\n value {\\n ...FacetV2ImageFragment\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n events {\\n click {\\n name\\n data\\n __typename\\n }\\n __typename\\n }\\n style {\\n spacing\\n background_color\\n border {\\n color\\n width\\n style\\n __typename\\n }\\n sizeClass\\n __typename\\n }\\n layout {\\n omitFooter\\n gridSpecs {\\n Mobile {\\n ...FacetV2LayoutGridFragment\\n __typename\\n }\\n Phablet {\\n ...FacetV2LayoutGridFragment\\n __typename\\n }\\n Tablet {\\n ...FacetV2LayoutGridFragment\\n __typename\\n }\\n Desktop {\\n ...FacetV2LayoutGridFragment\\n __typename\\n }\\n WideScreen {\\n ...FacetV2LayoutGridFragment\\n __typename\\n }\\n UltraWideScreen {\\n ...FacetV2LayoutGridFragment\\n __typename\\n }\\n __typename\\n }\\n dlsPadding {\\n top\\n right\\n bottom\\n left\\n __typename\\n }\\n __typename\\n }\\n custom\\n logging\\n __typename\\n}\\n\\nfragment FacetV2ComponentFragment on FacetV2Component {\\n id\\n category\\n __typename\\n}\\n\\nfragment FacetV2TextFragment on FacetV2Text {\\n title\\n titleTextAttributes {\\n textStyle\\n textColor\\n __typename\\n }\\n subtitle\\n subtitleTextAttributes {\\n textStyle\\n textColor\\n __typename\\n }\\n accessory\\n accessoryTextAttributes {\\n textStyle\\n textColor\\n __typename\\n }\\n description\\n descriptionTextAttributes {\\n textStyle\\n textColor\\n __typename\\n }\\n custom {\\n key\\n value\\n __typename\\n }\\n __typename\\n}\\n\\nfragment FacetV2ImageFragment on FacetV2Image {\\n uri\\n placeholder\\n local\\n style\\n logging\\n events {\\n click {\\n name\\n data\\n __typename\\n }\\n __typename\\n }\\n __typename\\n}\\n\\nfragment FacetV2LayoutGridFragment on FacetV2LayoutGrid {\\n interRowSpacing\\n interColumnSpacing\\n minDimensionCount\\n __typename\\n}\\n\\nfragment FacetV2PageFragment on FacetV2Page {\\n next {\\n name\\n data\\n __typename\\n }\\n onLoad {\\n name\\n data\\n __typename\\n }\\n __typename\\n}\\n"}' \
--compressed
我不知道为什么会这样。
我已尝试调试该问题,但到目前为止尚未成功。
我也可以通过Postman、Python和node.js来调用。
我使用这个很酷的网站:将curl命令转换为Python、JavaScript。
user-agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
authority : www.doordash.com
accept-language : en-US
身体
{
"operationName": "searchWithFilterFacetFeed",
"variables": {
"cursor": "eyJvZmZzZXQiOjUwLCJ2ZXJ0aWNhbF9pZHMiOltdLCJjcm9zc192ZXJ0aWNhbF9wYWdlX3R5cGUiOiJHTE9CQUxfU0VBUkNIX1BBR0UiLCJwYWdlX3N0YWNrX3RyYWNlIjpbXSwibGF5b3V0X292ZXJyaWRlIjoiVU5TUEVDSUZJRUQiLCJpc19wYWdpbmF0aW9uX2ZhbGxiYWNrIjpudWxsLCJzb3VyY2VfcGFnZV90eXBlIjpudWxsLCJ2ZXJ0aWNhbF9uYW1lcyI6e319",
"filterQuery": "",
"query": "street food",
"isDebug": false
},
"query": "query searchWithFilterFacetFeed($cursor: String, $filterQuery: String, $query: String!, $isDebug: Boolean, $fromFilterChange: Boolean, $serializedBundleGlobalSearchContext: String, $address: String) {\n searchWithFilterFacetFeed(\n cursor: $cursor\n filterQuery: $filterQuery\n query: $query\n isDebug: $isDebug\n fromFilterChange: $fromFilterChange\n serializedBundleGlobalSearchContext: $serializedBundleGlobalSearchContext\n address: $address\n ) {\n ...FacetFeedV2ResultFragment\n __typename\n }\n}\n\nfragment FacetFeedV2ResultFragment on FacetFeedV2Result {\n body {\n id\n header {\n ...FacetV2Fragment\n __typename\n }\n body {\n ...FacetV2Fragment\n __typename\n }\n layout {\n omitFooter\n __typename\n }\n __typename\n }\n page {\n ...FacetV2PageFragment\n __typename\n }\n header {\n ...FacetV2Fragment\n __typename\n }\n custom\n logging\n __typename\n}\n\nfragment FacetV2Fragment on FacetV2 {\n ...FacetV2BaseFragment\n childrenMap {\n ...FacetV2BaseFragment\n __typename\n }\n __typename\n}\n\nfragment FacetV2BaseFragment on FacetV2 {\n id\n childrenCount\n component {\n ...FacetV2ComponentFragment\n __typename\n }\n name\n text {\n ...FacetV2TextFragment\n __typename\n }\n images {\n main {\n ...FacetV2ImageFragment\n __typename\n }\n icon {\n ...FacetV2ImageFragment\n __typename\n }\n background {\n ...FacetV2ImageFragment\n __typename\n }\n accessory {\n ...FacetV2ImageFragment\n __typename\n }\n custom {\n key\n value {\n ...FacetV2ImageFragment\n __typename\n }\n __typename\n }\n __typename\n }\n events {\n click {\n name\n data\n __typename\n }\n __typename\n }\n style {\n spacing\n background_color\n border {\n color\n width\n style\n __typename\n }\n sizeClass\n __typename\n }\n layout {\n omitFooter\n gridSpecs {\n Mobile {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Phablet {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Tablet {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Desktop {\n ...FacetV2LayoutGridFragment\n __typename\n }\n WideScreen {\n ...FacetV2LayoutGridFragment\n __typename\n }\n UltraWideScreen {\n ...FacetV2LayoutGridFragment\n __typename\n }\n __typename\n }\n dlsPadding {\n top\n right\n bottom\n left\n __typename\n }\n __typename\n }\n custom\n logging\n __typename\n}\n\nfragment FacetV2ComponentFragment on FacetV2Component {\n id\n category\n __typename\n}\n\nfragment FacetV2TextFragment on FacetV2Text {\n title\n titleTextAttributes {\n textStyle\n textColor\n __typename\n }\n subtitle\n subtitleTextAttributes {\n textStyle\n textColor\n __typename\n }\n accessory\n accessoryTextAttributes {\n textStyle\n textColor\n __typename\n }\n description\n descriptionTextAttributes {\n textStyle\n textColor\n __typename\n }\n custom {\n key\n value\n __typename\n }\n __typename\n}\n\nfragment FacetV2ImageFragment on FacetV2Image {\n uri\n placeholder\n local\n style\n logging\n events {\n click {\n name\n data\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment FacetV2LayoutGridFragment on FacetV2LayoutGrid {\n interRowSpacing\n interColumnSpacing\n minDimensionCount\n __typename\n}\n\nfragment FacetV2PageFragment on FacetV2Page {\n next {\n name\n data\n __typename\n }\n onLoad {\n name\n data\n __typename\n }\n __typename\n}\n"
}
import requests
headers = {
'authority': 'www.doordash.com',
'accept': '*/*',
'accept-language': 'en-US',
'content-type': 'application/json',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
}
params = {
'operation': 'searchWithFilterFacetFeed',
}
json_data = {
'operationName': 'searchWithFilterFacetFeed',
'variables': {
'cursor': 'eyJvZmZzZXQiOjUwLCJ2ZXJ0aWNhbF9pZHMiOltdLCJjcm9zc192ZXJ0aWNhbF9wYWdlX3R5cGUiOiJHTE9CQUxfU0VBUkNIX1BBR0UiLCJwYWdlX3N0YWNrX3RyYWNlIjpbXSwibGF5b3V0X292ZXJyaWRlIjoiVU5TUEVDSUZJRUQiLCJpc19wYWdpbmF0aW9uX2ZhbGxiYWNrIjpudWxsLCJzb3VyY2VfcGFnZV90eXBlIjpudWxsLCJ2ZXJ0aWNhbF9uYW1lcyI6e319',
'filterQuery': '',
'query': 'street food',
'isDebug': False,
},
'query': 'query searchWithFilterFacetFeed($cursor: String, $filterQuery: String, $query: String!, $isDebug: Boolean, $fromFilterChange: Boolean, $serializedBundleGlobalSearchContext: String, $address: String) {\n searchWithFilterFacetFeed(\n cursor: $cursor\n filterQuery: $filterQuery\n query: $query\n isDebug: $isDebug\n fromFilterChange: $fromFilterChange\n serializedBundleGlobalSearchContext: $serializedBundleGlobalSearchContext\n address: $address\n ) {\n ...FacetFeedV2ResultFragment\n __typename\n }\n}\n\nfragment FacetFeedV2ResultFragment on FacetFeedV2Result {\n body {\n id\n header {\n ...FacetV2Fragment\n __typename\n }\n body {\n ...FacetV2Fragment\n __typename\n }\n layout {\n omitFooter\n __typename\n }\n __typename\n }\n page {\n ...FacetV2PageFragment\n __typename\n }\n header {\n ...FacetV2Fragment\n __typename\n }\n custom\n logging\n __typename\n}\n\nfragment FacetV2Fragment on FacetV2 {\n ...FacetV2BaseFragment\n childrenMap {\n ...FacetV2BaseFragment\n __typename\n }\n __typename\n}\n\nfragment FacetV2BaseFragment on FacetV2 {\n id\n childrenCount\n component {\n ...FacetV2ComponentFragment\n __typename\n }\n name\n text {\n ...FacetV2TextFragment\n __typename\n }\n images {\n main {\n ...FacetV2ImageFragment\n __typename\n }\n icon {\n ...FacetV2ImageFragment\n __typename\n }\n background {\n ...FacetV2ImageFragment\n __typename\n }\n accessory {\n ...FacetV2ImageFragment\n __typename\n }\n custom {\n key\n value {\n ...FacetV2ImageFragment\n __typename\n }\n __typename\n }\n __typename\n }\n events {\n click {\n name\n data\n __typename\n }\n __typename\n }\n style {\n spacing\n background_color\n border {\n color\n width\n style\n __typename\n }\n sizeClass\n __typename\n }\n layout {\n omitFooter\n gridSpecs {\n Mobile {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Phablet {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Tablet {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Desktop {\n ...FacetV2LayoutGridFragment\n __typename\n }\n WideScreen {\n ...FacetV2LayoutGridFragment\n __typename\n }\n UltraWideScreen {\n ...FacetV2LayoutGridFragment\n __typename\n }\n __typename\n }\n dlsPadding {\n top\n right\n bottom\n left\n __typename\n }\n __typename\n }\n custom\n logging\n __typename\n}\n\nfragment FacetV2ComponentFragment on FacetV2Component {\n id\n category\n __typename\n}\n\nfragment FacetV2TextFragment on FacetV2Text {\n title\n titleTextAttributes {\n textStyle\n textColor\n __typename\n }\n subtitle\n subtitleTextAttributes {\n textStyle\n textColor\n __typename\n }\n accessory\n accessoryTextAttributes {\n textStyle\n textColor\n __typename\n }\n description\n descriptionTextAttributes {\n textStyle\n textColor\n __typename\n }\n custom {\n key\n value\n __typename\n }\n __typename\n}\n\nfragment FacetV2ImageFragment on FacetV2Image {\n uri\n placeholder\n local\n style\n logging\n events {\n click {\n name\n data\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment FacetV2LayoutGridFragment on FacetV2LayoutGrid {\n interRowSpacing\n interColumnSpacing\n minDimensionCount\n __typename\n}\n\nfragment FacetV2PageFragment on FacetV2Page {\n next {\n name\n data\n __typename\n }\n onLoad {\n name\n data\n __typename\n }\n __typename\n}\n',
}
response = requests.post(
'https://www.doordash.com/graphql/searchWithFilterFacetFeed',
params=params,
headers=headers,
json=json_data,
)
print(response.json())
import axios from 'axios';
const response = await axios.post(
'https://www.doordash.com/graphql/searchWithFilterFacetFeed',
{
'operationName': 'searchWithFilterFacetFeed',
'variables': {
'cursor': 'eyJvZmZzZXQiOjUwLCJ2ZXJ0aWNhbF9pZHMiOltdLCJjcm9zc192ZXJ0aWNhbF9wYWdlX3R5cGUiOiJHTE9CQUxfU0VBUkNIX1BBR0UiLCJwYWdlX3N0YWNrX3RyYWNlIjpbXSwibGF5b3V0X292ZXJyaWRlIjoiVU5TUEVDSUZJRUQiLCJpc19wYWdpbmF0aW9uX2ZhbGxiYWNrIjpudWxsLCJzb3VyY2VfcGFnZV90eXBlIjpudWxsLCJ2ZXJ0aWNhbF9uYW1lcyI6e319',
'filterQuery': '',
'query': 'street food',
'isDebug': false
},
'query': 'query searchWithFilterFacetFeed($cursor: String, $filterQuery: String, $query: String!, $isDebug: Boolean, $fromFilterChange: Boolean, $serializedBundleGlobalSearchContext: String, $address: String) {\n searchWithFilterFacetFeed(\n cursor: $cursor\n filterQuery: $filterQuery\n query: $query\n isDebug: $isDebug\n fromFilterChange: $fromFilterChange\n serializedBundleGlobalSearchContext: $serializedBundleGlobalSearchContext\n address: $address\n ) {\n ...FacetFeedV2ResultFragment\n __typename\n }\n}\n\nfragment FacetFeedV2ResultFragment on FacetFeedV2Result {\n body {\n id\n header {\n ...FacetV2Fragment\n __typename\n }\n body {\n ...FacetV2Fragment\n __typename\n }\n layout {\n omitFooter\n __typename\n }\n __typename\n }\n page {\n ...FacetV2PageFragment\n __typename\n }\n header {\n ...FacetV2Fragment\n __typename\n }\n custom\n logging\n __typename\n}\n\nfragment FacetV2Fragment on FacetV2 {\n ...FacetV2BaseFragment\n childrenMap {\n ...FacetV2BaseFragment\n __typename\n }\n __typename\n}\n\nfragment FacetV2BaseFragment on FacetV2 {\n id\n childrenCount\n component {\n ...FacetV2ComponentFragment\n __typename\n }\n name\n text {\n ...FacetV2TextFragment\n __typename\n }\n images {\n main {\n ...FacetV2ImageFragment\n __typename\n }\n icon {\n ...FacetV2ImageFragment\n __typename\n }\n background {\n ...FacetV2ImageFragment\n __typename\n }\n accessory {\n ...FacetV2ImageFragment\n __typename\n }\n custom {\n key\n value {\n ...FacetV2ImageFragment\n __typename\n }\n __typename\n }\n __typename\n }\n events {\n click {\n name\n data\n __typename\n }\n __typename\n }\n style {\n spacing\n background_color\n border {\n color\n width\n style\n __typename\n }\n sizeClass\n __typename\n }\n layout {\n omitFooter\n gridSpecs {\n Mobile {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Phablet {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Tablet {\n ...FacetV2LayoutGridFragment\n __typename\n }\n Desktop {\n ...FacetV2LayoutGridFragment\n __typename\n }\n WideScreen {\n ...FacetV2LayoutGridFragment\n __typename\n }\n UltraWideScreen {\n ...FacetV2LayoutGridFragment\n __typename\n }\n __typename\n }\n dlsPadding {\n top\n right\n bottom\n left\n __typename\n }\n __typename\n }\n custom\n logging\n __typename\n}\n\nfragment FacetV2ComponentFragment on FacetV2Component {\n id\n category\n __typename\n}\n\nfragment FacetV2TextFragment on FacetV2Text {\n title\n titleTextAttributes {\n textStyle\n textColor\n __typename\n }\n subtitle\n subtitleTextAttributes {\n textStyle\n textColor\n __typename\n }\n accessory\n accessoryTextAttributes {\n textStyle\n textColor\n __typename\n }\n description\n descriptionTextAttributes {\n textStyle\n textColor\n __typename\n }\n custom {\n key\n value\n __typename\n }\n __typename\n}\n\nfragment FacetV2ImageFragment on FacetV2Image {\n uri\n placeholder\n local\n style\n logging\n events {\n click {\n name\n data\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment FacetV2LayoutGridFragment on FacetV2LayoutGrid {\n interRowSpacing\n interColumnSpacing\n minDimensionCount\n __typename\n}\n\nfragment FacetV2PageFragment on FacetV2Page {\n next {\n name\n data\n __typename\n }\n onLoad {\n name\n data\n __typename\n }\n __typename\n}\n'
},
{
params: {
'operation': 'searchWithFilterFacetFeed'
},
headers: {
'authority': 'www.doordash.com',
'accept': '*/*',
'accept-language': 'en-US',
'content-type': 'application/json',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
}
);
console.log(JSON.stringify(response.data));