我正在尝试创建一个记录到服务器的方法,抓取它找到的json文件,然后选择每个元素中的4个并将其发送到一个地址。下面的代码似乎可行,当我只为发送链接中的每种格式提供一个已知的数据时,而不是一次应选择每个格式的循环。我得到的错误是:instance of smallInteger did not understand #readStream
。导致此错误的原因是什么?我还能如何自动化这些请求?
1 to: 4 do: [ :each |
each.
a := ZnClient new.
a get: 'https://MyServer/'.
a headerAt: 'referer' put: 'https://MyServer' ;
formAt: 'email' add: 'myEmail' ;
formAt: 'password' add: 'MyPass'.
a post.
a get: 'https://MyServer/json'.
data := NeoJSONReader fromString: a contents.
list := data at: each.
foo := list at: 'num'.
poo := list at: 'name'.
a get: 'https://MyServer/copy/', poo.
a url: 'https://MyServer/send/'.
a formAt: 'add' add: 'given address' ;
formAt: 'nb_pic' add: foo ;
formAt: 'identf' add: poo.
a post.
a get: 'https://MyServer/json' ]

答案 0 :(得分:1)
get
和post
消息而不理解他们实际上会执行" http get"和" http post"每次发送它们。
所以,虽然"语法"它自我是好的,你正在做什么非常不正确(我不明白是什么)。看,这就是你的程序的理解方式:
4 timesRepeat: [
"this will do a post"
ZnClient new
url: 'https://MyServer/';
headerAt: 'referer' put: 'https://MyServer';
formAt: 'email' add: 'myEmail';
formAt: 'password' add: 'MyPass';
post.
"this is a simple get"
a := ZnClient get: 'https://MyServer/json'.
data := NeoJSONReader fromString: a contents.
list := data at:each.
foo := list at:'num'.
poo := list at:'name'.
"this is another get that I don't know what's doing here"
a := ZnClient get: 'https://MyServer/copy/', poo.
"this is another post"
a := ZnClient
url: 'https://MyServer/send/';
formAt: 'add' add: 'given address';
formAt: 'nb_pic' add:foo;
formAt: 'identf' add: poo;
post.
"and finally, this is another get"
ZnClient get: 'https://MyServer/json' ]
显然,该代码没有按照您的意愿执行:)
答案 1 :(得分:0)
我想通过@Carlo暗示错误消息:smallInteger的实例不理解#readStream是由于从poo和foo收集的值。
list := data at:each.
foo := list at:'num'. "Here and integer"
poo := list at:'name'."Here a byteString"
事实上,表单操作需要一个键和值,如图所示,但是值必须是一个字符串,我只是用poo和foo代替来添加:
formAt: 'nb_pic' add:foo;
formAt: 'identf' add: poo;
因此我需要转换foo和poo asString,现在它工作正常。感谢