bugfix> python > 投稿

私はリクエストPython 2.7を使用してカールポストクエリを実行しようとしていますが、APIレスポンスはカールとリクエストライブラリを使用して異なっています。

ポストクエリは、APIパラメーターとしてのファイルと名前と値のペアのデータという非常に単純なものです。

以下はcurlマルチパート投稿リクエストです。

curl -uadmin:blabla123 -X POST 127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/6a0ab661-1c43-43ed-b07f-a564f6bcb5ca/children -F filedata=@file1.txt -F name=document__55;nodeType=content

Python 2.7コードは次のとおりです。

import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
from config import USER, PASSWD
def createDocument( documentFilename, documentMetadata, targetFolderNodeId):
    '''
    Uploads a file and its meta-data to the CMIS server under the specified
     target folder
    '''
    with open(documentFilename, 'rb') as file:
        files = {'file': file}
        # createURL = 'http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/{0}/children'.format( targetFolderNodeId )
        createURL = 'http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/6a0ab661-1c43-43ed-b07f-a564f6bcb5ca/children'
        data =  {
                  "name":"document__55",
                  "nodeType":"cm:content", 
                }
        response = requests.post( createURL, data = data, files = files, auth=HTTPBasicAuth(USER, PASSWD) )
        print(response)
        print(response.json)
        print(response.text)
createDocument('file1.txt', '', '')

Curlは200のHTTPコードを返しますが、スクリプトは奇妙なことに400を返します。

どんな助けでも大歓迎です。

回答 2 件
  • 一見したところ、そのスクリプトが失敗する理由とカールが機能する理由は複数あります。

    nodeType=content  カール中、 "nodeType":"cm:content"  スクリプトで

    スクリプトのペイロードの2行目に追加のコンマがあります

    あなたは設定していませんコンテンツタイプ  multipart/form-data としてのヘッダー  スクリプト内で、 curl-F  オプションは実際に

    また、エンドポイントは400応答とともに詳細エラーを提供する必要があります。存在する場合、エラーの原因を特定するのに役立ちます。

  • 実際、カールには-F filedata=@file1.txtがありますが、スクリプトにはfiles = {'file':file}があり、これは同じではないため、files = {'filedata':file}を使用する必要がありました。 :)

    def createDocument( documentFilename, documentMetadata, targetFolderNodeId):
        '''
        Uploads a file and its meta-data to the CMIS server under the specified
         target folder
        '''
        with open(documentFilename, 'rb') as file:
            files = {'filedata': file}
            createURL = 'http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/{0}/children'.format( targetFolderNodeId )
            data =  {
                      "name":"document__77",
                      "nodeType":"cm:content"
                    }
            response = requests.post( createURL, data = data, files = files, auth=HTTPBasicAuth(USER, PASSWD) )
            print(response)
            print(response.json)
            print(response.text)
            print(response.headers)
            # print([i for i in dir(response) if 'header' in i])
    
    

あなたの答え