Q. RESTインターフェースで大きなデータをPOSTするとエラーになります。

RESTインターフェースでCopper PDFにアクセスする場合、パラメータが application/x-www-form-urlencoded 形式だと、POSTできるサイズに上限があります(概ね190KB)。

大きなデータをRESTインターフェースで送る場合は、multipart/form-data 形式で送って下さい。以下はRubyとPythonのコード例です。

Ruby:

require 'httpclient'

# 変換対象のHTML
data = <<DATA

RubyからCopper PDFを使う。

DATA

# POSTの準備
client = HTTPClient.new
postdata = {
"rest.user" => "user",
"rest.password" => "kappa",
"rest.main" => data,
}

# 大きなデータを扱えるようにmultipart/formdataで送信(boundaryは適当な文字列)
boundary = "3w48588hfwfdwed2332hdiuj2d3jiuhd32"
puts client.post_content("http://localhost:8097/transcode", postdata,
"content-type" => "multipart/form-data, boundary=#{boundary}")

Python:

import urllib2

# multipart/form-dataの出力(boundaryは適当な文字列)
boundary = '3w48588hfwfdwed2332hdiuj2d3jiuhd32'
def multipart_formdata(form_dict):
disposition = 'Content-Disposition: form-data; name="%s"'
lines = []
for k, v in form_dict.iteritems():
lines.append('--' + boundary)
lines.append(disposition % k)
lines.append('')
lines.append(v)
lines.append("--" + boundary + "--")
lines.append('')
value = "rn".join(lines)
return value

# 変換対象のHTML
data = """

PythonからCopper PDFを使う。

"""

# POSTの実行
params = {'rest.user':'user',
'rest.password':'kappa',
'rest.main':data}

url = 'http://localhost:8097/transcode'
req = urllib2.Request(url)
req.add_header("Content-Type",
"multipart/form-data; boundary=" + boundary)
data = multipart_formdata(params)
f = urllib2.urlopen(req, data)

# 結果表示
print f.read()


PDF

Comments are closed.