Добавление Cookie в запрос SOAPpy - PullRequest
0 голосов
/ 30 июня 2009

Я пытаюсь отправить запрос SOAP с использованием SOAPpy в качестве клиента. Я нашел документацию о том, как добавить cookie-файл с помощью расширения SOAPpy.HTTPTransport, но, похоже, я не могу заставить его работать.

Я пытался использовать пример здесь , но сервер, на котором я пытаюсь отправить запрос, начал выдавать 415 ошибок, поэтому я пытаюсь сделать это, не используя ClientCookie или выясняя, почему сервер выбрасывает 415, когда я его использую. Я подозреваю, что это может быть связано с тем, что ClientCookie использует urllib2 & http / 1.1, тогда как SOAPpy использует urllib & http / 1.0

Кто-нибудь знает, как заставить ClientCookie использовать http / 1.0, если это даже проблема, или способ добавить cookie в заголовки SOAPpy без использования ClientCookie? Если этот код использовался другими службами, он только выдает ошибки при отправке запросов на серверы Microsoft.

Я все еще нахожусь на питоне, так что, возможно, я просто что-то делаю глупо.

import sys, os, string
from SOAPpy import WSDL,HTTPTransport,Config,SOAPAddress,Types
import ClientCookie

Config.cookieJar = ClientCookie.MozillaCookieJar()

class CookieTransport(HTTPTransport):
  def call(self, addr, data, namespace, soapaction = None, encoding = None,
    http_proxy = None, config = Config):

    if not isinstance(addr, SOAPAddress):
      addr = SOAPAddress(addr, config)

    cookie_cutter = ClientCookie.HTTPCookieProcessor(config.cookieJar)
    hh = ClientCookie.HTTPHandler()
    hh.set_http_debuglevel(1)

    # TODO proxy support
    opener = ClientCookie.build_opener(cookie_cutter, hh)

    t = 'text/xml';
    if encoding != None:
      t += '; charset="%s"' % encoding
    opener.addheaders = [("Content-Type", t),
          ("Cookie", "Username=foobar"), # ClientCookie should handle
          ("SOAPAction" , "%s" % (soapaction))]

    response = opener.open(addr.proto + "://" + addr.host + addr.path, data)
    data = response.read()

    # get the new namespace
    if namespace is None:
      new_ns = None
    else:
      new_ns = self.getNS(namespace, data)

    print '\n' * 4 , '-'*50
    # return response payload
    return data, new_ns


url = 'http://www.authorstream.com/Services/Test.asmx?WSDL'
proxy = WSDL.Proxy(url, transport=CookieTransport)
print proxy.GetList()

Ответы [ 2 ]

0 голосов
/ 09 мая 2013

Отличный способ использования файлов cookie с вызовами SOAPpy Использование файлов cookie с вызовами SOAPpy

0 голосов
/ 30 июня 2009

Ошибка 415 из-за неправильного заголовка типа содержимого.

Установите httpfox для firefox или любой другой инструмент (wireshark, Charles или Fiddler), чтобы отслеживать, какие заголовки вы отправляете. Попробуйте Content-Type: application / xml.

...
t = 'application/xml';
if encoding != None:
  t += '; charset="%s"' % encoding
...

Если вы пытаетесь отправить файл на веб-сервер, используйте Content-Type: application / x-www-form-urlencoded

...