Python 2.7 запрашивает вызов API REST, который не работает так же, как curl - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь выполнить прокручивать пост-запрос, используя запросы Python 2.7, однако ответ API по-разному, используя скручивание и запросы lib.

Пост-запрос довольно прост для данных файла и пары имя-значениев качестве параметров 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 ]

0 голосов
/ 25 мая 2018

на самом деле в curl у меня есть -F filedata=@file1.txt, но в скрипте у меня есть files = {'file': file}, что не одно и то же, поэтому мне просто нужно было использовать files = {'filedata': файл}:)

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])
0 голосов
/ 25 мая 2018

При первом взгляде причины сбоя скрипта и работы скручивания могут быть более одного:

  • nodeType=content в скручивании, а "nodeType":"cm:content" в скрипте
  • во второй строке полезной нагрузки скрипта есть дополнительная запятая
  • вы не устанавливаете заголовок Content-Type как multipart/form-data в скрипте, который curl '* -Fопция фактически делает

Кроме того, конечная точка должна выдавать подробную ошибку вместе с ответом 400.Если это так, это может помочь определить причину ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...