请求opensea api失败

Posted

技术标签:

【中文标题】请求opensea api失败【英文标题】:Request to opensea api failing 【发布时间】:2021-11-04 18:09:57 【问题描述】:

我正在尝试使用 request-promise 通过 opensea 的 graphql api 检索一个集合。我发送带有这些参数的请求,作为响应,我一直收到状态码 403。我直接从浏览器复制了参数,使用 fetch 可以正常工作。

    const options = 
      method: 'POST',
      url: 'https://api.opensea.io/graphql',
      headers: 
        Host: 'api.opensea.io',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
        'content-type': 'application/json',
        accept: '*/*',
        origin: 'https://opensea.io',
        'sec-fetch-site': 'same-site',
        'sec-fetch-mode': 'cors',
        'sec-fetch-dest': 'empty',
        referer: 'https://opensea.io/'
      ,
      body: 
       id: 'collectionQuery',
       query: 'query collectionQuery(\n  $collection: CollectionSlug!\n  $collections: [CollectionSlug!]\n  $collectionQuery: String\n  $includeHiddenCollections: Boolean\n  $numericTraits: [TraitRangeType!]\n  $query: String\n  $sortAscending: Boolean\n  $sortBy: SearchSortBy\n  $stringTraits: [TraitInputType!]\n  $toggles: [SearchToggle!]\n  $showContextMenu: Boolean\n) \n  collection(collection: $collection) \n    isEditable\n    bannerImageUrl\n    name\n    description\n    imageUrl\n    relayId\n    representativeAsset \n      assetContract \n        openseaVersion\n        id\n      \n      id\n    \n    ...collection_url\n    ...CollectionHeader_data\n    id\n  \n  assets: query \n    ...AssetSearch_data_1bS60n\n  \n\n\nfragment AssetCardContent_asset on AssetType \n  relayId\n  name\n  ...AssetMedia_asset\n  assetContract \n    address\n    chain\n    openseaVersion\n    id\n  \n  tokenId\n  collection \n    slug\n    id\n  \n  isDelisted\n\n\nfragment AssetCardContent_assetBundle on AssetBundleType \n  assetQuantities(first: 18) \n    edges \n      node \n        asset \n          relayId\n          ...AssetMedia_asset\n          id\n        \n        id\n      \n    \n  \n\n\nfragment AssetCardFooter_assetBundle on AssetBundleType \n  name\n  assetCount\n  assetQuantities(first: 18) \n    edges \n      node \n        asset \n          collection \n            name\n            relayId\n            isVerified\n            ...collection_url\n            id\n          \n          id\n        \n        id\n      \n    \n  \n  assetEventData \n    lastSale \n      unitPriceQuantity \n        ...AssetQuantity_data\n        id\n      \n    \n  \n  orderData \n    bestBid \n      orderType\n      paymentAssetQuantity \n        ...AssetQuantity_data\n        id\n      \n    \n    bestAsk \n      closedAt\n      orderType\n      dutchAuctionFinalPrice\n      openedAt\n      priceFnEndedAt\n      quantity\n      decimals\n      paymentAssetQuantity \n        quantity\n        ...AssetQuantity_data\n        id\n      \n    \n  \n\n\nfragment AssetCardFooter_asset_2V84VL on AssetType \n  name\n  tokenId\n  collection \n    name\n    isVerified\n    ...collection_url\n    id\n  \n  hasUnlockableContent\n  isDelisted\n  isFrozen\n  assetContract \n    address\n    chain\n    openseaVersion\n    id\n  \n  assetEventData \n    firstTransfer \n      timestamp\n    \n    lastSale \n      unitPriceQuantity \n        ...AssetQuantity_data\n        id\n      \n    \n  \n  decimals\n  orderData \n    bestBid \n      orderType\n      paymentAssetQuantity \n        ...AssetQuantity_data\n        id\n      \n    \n    bestAsk \n      closedAt\n      orderType\n      dutchAuctionFinalPrice\n      openedAt\n      priceFnEndedAt\n      quantity\n      decimals\n      paymentAssetQuantity \n        quantity\n        ...AssetQuantity_data\n        id\n      \n    \n  \n\n\nfragment AssetCardHeader_data_27d9G3 on AssetType \n  relayId\n  favoritesCount\n  isDelisted\n  isFavorite\n  ...AssetContextMenu_data_3z4lq0 @include(if: $showContextMenu)\n\n\nfragment AssetContextMenu_data_3z4lq0 on AssetType \n  ...asset_edit_url\n  ...asset_url\n  ...itemEvents_data\n  isDelisted\n  isEditable \n    value\n    reason\n  \n  isListable\n  ownership(identity: ) \n    isPrivate\n    quantity\n  \n  creator \n    address\n    id\n  \n  collection \n    isAuthorizedEditor\n    id\n  \n\n\nfragment AssetMedia_asset on AssetType \n  animationUrl\n  backgroundColor\n  collection \n    displayData \n      cardDisplayStyle\n    \n    id\n  \n  isDelisted\n  displayImageUrl\n\n\nfragment AssetQuantity_data on AssetQuantityType \n  asset \n    ...Price_data\n    id\n  \n  quantity\n\n\nfragment AssetSearchFilter_data_1GloFv on Query \n  ...CollectionFilter_data_tXjHb\n  collection(collection: $collection) \n    numericTraits \n      key\n      value \n        max\n        min\n      \n      ...NumericTraitFilter_data\n    \n    stringTraits \n      key\n      ...StringTraitFilter_data\n    \n    id\n  \n  ...PaymentFilter_data_2YoIWt\n\n\nfragment AssetSearchList_data_gVyhu on SearchResultType \n  asset \n    assetContract \n      address\n      chain\n      id\n    \n    collection \n      isVerified\n      id\n    \n    relayId\n    tokenId\n    ...AssetSelectionItem_data\n    ...asset_url\n    id\n  \n  assetBundle \n    relayId\n    id\n  \n  ...Asset_data_gVyhu\n\n\nfragment AssetSearch_data_1bS60n on Query \n  ...CollectionHeadMetadata_data_2YoIWt\n  ...AssetSearchFilter_data_1GloFv\n  ...SearchPills_data_2Kg4Sq\n  search(collections: $collections, first: 32, numericTraits: $numericTraits, querystring: $query, resultType: ASSETS, sortAscending: $sortAscending, sortBy: $sortBy, stringTraits: $stringTraits, toggles: $toggles) \n    edges \n      node \n        ...AssetSearchList_data_gVyhu\n        __typename\n      \n      cursor\n    \n    totalCount\n    pageInfo \n      endCursor\n      hasNextPage\n    \n  \n\n\nfragment AssetSelectionItem_data on AssetType \n  backgroundColor\n  collection \n    displayData \n      cardDisplayStyle\n    \n    imageUrl\n    id\n  \n  imageUrl\n  name\n  relayId\n\n\nfragment Asset_data_gVyhu on SearchResultType \n  asset \n    isDelisted\n    ...AssetCardHeader_data_27d9G3\n    ...AssetCardContent_asset\n    ...AssetCardFooter_asset_2V84VL\n    ...AssetMedia_asset\n    ...asset_url\n    ...itemEvents_data\n    id\n  \n  assetBundle \n    ...bundle_url\n    ...AssetCardContent_assetBundle\n    ...AssetCardFooter_assetBundle\n    id\n  \n\n\nfragment CollectionFilter_data_tXjHb on Query \n  selectedCollections: collections(first: 25, collections: $collections, includeHidden: true) \n    edges \n      node \n        assetCount\n        imageUrl\n        name\n        slug\n        isVerified\n        id\n      \n    \n  \n  collections(first: 100, includeHidden: $includeHiddenCollections, query: $collectionQuery, sortBy: SEVEN_DAY_VOLUME) \n    edges \n      node \n        assetCount\n        imageUrl\n        name\n        slug\n        isVerified\n        id\n        __typename\n      \n      cursor\n    \n    pageInfo \n      endCursor\n      hasNextPage\n    \n  \n\n\nfragment CollectionHeadMetadata_data_2YoIWt on Query \n  collection(collection: $collection) \n    bannerImageUrl\n    description\n    imageUrl\n    name\n    id\n  \n\n\nfragment CollectionHeader_data on CollectionType \n  name\n  description\n  imageUrl\n  bannerImageUrl\n  ...CollectionStatsBar_data\n  ...SocialBar_data\n  ...verification_data\n\n\nfragment CollectionModalContent_data on CollectionType \n  description\n  imageUrl\n  name\n  slug\n\n\nfragment CollectionStatsBar_data on CollectionType \n  stats \n    numOwners\n    totalSupply\n    totalVolume\n    id\n  \n  slug\n  floorPrice\n\n\nfragment NumericTraitFilter_data on NumericTraitTypePair \n  key\n  value \n    max\n    min\n  \n\n\nfragment PaymentFilter_data_2YoIWt on Query \n  paymentAssets(first: 10) \n    edges \n      node \n        symbol\n        relayId\n        id\n        __typename\n      \n      cursor\n    \n    pageInfo \n      endCursor\n      hasNextPage\n    \n  \n  PaymentFilter_collection: collection(collection: $collection) \n    paymentAssets \n      symbol\n      relayId\n      id\n    \n    id\n  \n\n\nfragment Price_data on AssetType \n  decimals\n  imageUrl\n  symbol\n  usdSpotPrice\n  assetContract \n    blockExplorerLink\n    chain\n    id\n  \n\n\nfragment SearchPills_data_2Kg4Sq on Query \n  selectedCollections: collections(first: 25, collections: $collections, includeHidden: true) \n    edges \n      node \n        imageUrl\n        name\n        slug\n        ...CollectionModalContent_data\n        id\n      \n    \n  \n\n\nfragment SocialBar_data on CollectionType \n  relayId\n  discordUrl\n  externalUrl\n  instagramUsername\n  mediumUsername\n  slug\n  telegramUrl\n  twitterUsername\n  ...collection_url\n\n\nfragment StringTraitFilter_data on StringTraitType \n  counts \n    count\n    value\n  \n  key\n\n\nfragment asset_edit_url on AssetType \n  assetContract \n    address\n    chain\n    id\n  \n  tokenId\n  collection \n    slug\n    id\n  \n\n\nfragment asset_url on AssetType \n  assetContract \n    address\n    chain\n    id\n  \n  tokenId\n\n\nfragment bundle_url on AssetBundleType \n  slug\n\n\nfragment collection_url on CollectionType \n  slug\n\n\nfragment itemEvents_data on AssetType \n  assetContract \n    address\n    chain\n    id\n  \n  tokenId\n\n\nfragment verification_data on CollectionType \n  isMintable\n  isSafelisted\n  isVerified\n\n',
       variables: 
        collection: 'beeple-special-edition',
        collections: ['beeple-special-edition'],
        collectionQuery: null,
        includeHiddenCollections: null,
        numericTraits: null,
        query: null,
        sortAscending: true,
        sortBy: 'PRICE',
        stringTraits: null,
        toggles: null,
        showContextMenu: true
    
  

这会导致响应状态代码为 403,并在响应正文中显示 error code: 1020

【问题讨论】:

你成功了吗? 【参考方案1】:

不幸的是,OpenSea 目前有 CloudFlaire 保护他们的 GraphQL 端点,这意味着开发人员还不能使用它。 This issue 已提交,但 OpenSea 尚未回复

【讨论】:

以上是关于请求opensea api失败的主要内容,如果未能解决你的问题,请参考以下文章

ecstore 后台登陆跳转到 api失败,中心请求网店API失败

iOS 共享扩展中的 API 请求立即失败

异步等待失败 swift API 请求

UrlFetchApp 请求在菜单函数中失败,但在自定义函数中失败(连接到外部 REST API)

页面加载后我的第一个 api 请求总是失败

使用 django API 和 Alamofire 请求失败