簡體   English   中英

帶有Python模塊的POST請求

[英]POST requests with Python module

我試圖訪問正在開發的Web服務,並通過Python腳本執行POST請求。 我已經用Postman測試了url和參數,並且可以正常工作。

我的劇本:

import requests
import json
import jsonpickle



f = open('C:\Users\Administrator\Desktop\myla311.json', 'r')



data = jsonpickle.encode(f)

url = "url"
headers = {'Content-type': 'raw', 'Accept': '/'}

response = requests.post(url, json=data, headers=headers)
f.close()

print response.text


print response

我的輸出:

C:\Python27\ArcGIS10.2\python.exe C:/Python27/ArcGIS10.2/websocket-client-0.23.0/websocket-client-0.23.0/examples/MYLAJSONtesting.py
com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.kahuna.request.wrapper.ServiceRequestWrapper] from String value ('null'); no single-String constructor/factory method
 at [Source: org.apache.camel.converter.stream.InputStreamCache@264330f4; line: 1, column: 1]
  at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
  at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:757)
  at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:277)
  at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:289)
  at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1137)
  at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:139)
  at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:126)
  at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3051)
  at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2192)
  at org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:128)
  at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:67)
  at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
  at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163)
  at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
  at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
  at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
  at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:111)
  at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:82)
  at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
  at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163)
  at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
  at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
  at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
  at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
  at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
  at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)
  at org.apache.camel.component.restlet.RestletConsumer$1.handle(RestletConsumer.java:55)
  at org.apache.camel.component.restlet.MethodBasedRouter.handle(MethodBasedRouter.java:54)
  at org.restlet.routing.Filter.doHandle(Filter.java:159)
  at org.restlet.routing.Filter.handle(Filter.java:206)
  at org.restlet.routing.Router.doHandle(Router.java:431)
  at org.restlet.routing.Router.handle(Router.java:648)
  at org.restlet.routing.Filter.doHandle(Filter.java:159)
  at org.restlet.routing.Filter.handle(Filter.java:206)
  at org.restlet.routing.Router.doHandle(Router.java:431)
  at org.restlet.routing.Router.handle(Router.java:648)
  at org.restlet.routing.Filter.doHandle(Filter.java:159)
  at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155)
  at org.restlet.routing.Filter.handle(Filter.java:206)
  at org.restlet.routing.Filter.doHandle(Filter.java:159)
  at org.restlet.routing.Filter.handle(Filter.java:206)
  at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
  at org.restlet.Component.handle(Component.java:406)
  at org.restlet.Server.handle(Server.java:516)
  at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:72)
  at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:152)
  at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1118)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
  at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
  at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
  at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
  at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
  at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:324)
  at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)
  at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
  at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
  at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at oracle.security.wls.filter.SSOSessionSynchronizationFilter.doFilter(SSOSessionSynchronizationFilter.java:292)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:163)
  at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3748)
  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)
  at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
  at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
  at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)
  at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)
  at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491)
  at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
  at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
<Response [500]>**

JSON文件:

{
    "MetaData": {},
    "RequestSpecificDetail": {
        "ParentSRNumberForLink": ""
    },
    "SRData": {
        "Anonymous": "Y",
        "Assignee": "",
        "CreatedByUserLogin": "",
        "CustomerAccessNumber": "",
        "LADWPAccountNo": "",
        "Language": "English",
        "ListOfLa311GisLayer": {},
        "ListOfLa311ServiceRequestNotes": {
            "La311ServiceRequestNotes": [
                {
                    "Comment": "hxhdudi",
                    "CommentType": "Feedback",
                    "FeedbackSRType": "Weed Abatement for Pvt Parcels",
                    "IsSrNoAvailable": "N"
                },
                {
                    "Comment": "",
                    "CommentType": "External",
                    "CreatedByUser": "",
                    "IsSrNoAvailable": "N"
                }
            ]
        },
        "LoginUser": "",
        "MobilOS": "Android",
        "NewContactEmail": "",
        "NewContactFirstName": "",
        "NewContactLastName": "",
        "NewContactPhone": "",
        "Owner": "Other",
        "ParentSRNumber": "",
        "Priority": "Normal",
        "SRCommunityPoliceStation": "RAMPART",
        "SRType": "Feedback",
        "ServiceDate": "01/22/2015",
        "Source": "Mobile App",
        "Status": "Open",
        "UpdatedByUserLogin": ""
    }
}

預期產量:

{"status":{"code":311,"message":"Service Request Successfully Submited","cause":""},"Response":{"PrimaryRowId":"1-3GZFZ","ListOfServiceRequest":{"ServiceRequest":[{"SRNumber":"1-5831279"}]}}}

在此處輸入圖片說明

編輯:將json=data to data= data更改json=data to data= data我收到的json=data to data= data

{"status":{"code":1007,"message":"Service Request Does Not Submitted.","cause":"java.lang.NullPointerException"}}
<Response [200]>

Process finished with exit code 0

data = jsonpickle.encode(f) 文檔說您必須將Python對象傳遞給此函數。 我不確定,也許這可能會有所幫助;
data = jsonpickle.encode( jsonpickle.decode(f.read()) )在這里,我嘗試將json字符串轉換為Python對象,然后再轉換回json。 您可以嘗試傳遞為data = f.read()

您正在使用Restlet庫訪問用Java編寫的Web服務。 我認為Ryan O'Donnell在您對request.post調用的使用以及對內容類型的需求上是正確的。

請參閱請求文檔中的以下示例:

import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}

r = requests.post(url, data=json.dumps(payload), headers=headers)

您可能應該添加一個accept標頭:

'Accept': 'application/json'

最后,與其使用openclose文件,不如使用with塊更加安全。 您的代碼可能看起來像這樣:

with open('C:\Users\Administrator\Desktop\myla311.json', 'r') as f:
    payload = f.read()

headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
r = requests.post(url, data=payload, headers=headers)

我不確定您對jsonpickle的使用是做什么的,但是不需要解碼和重新編碼您的有效負載。 它已經是JSON,這就是您要發送的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM