Что может быть не так с этим синтаксисом pharos?
Я пытаюсь создать метод, который регистрирует на сервере, захватывает найденный файл 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' ]
2 ответа
На первый взгляд, в синтаксисе нет ничего плохого.
Но похоже, что вы не получили API используемой вами инфраструктуры: вы отправляете 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' ]
ясно, что этот код не делает то, что вы хотите, чтобы он делал:)
Благодаря подсказке @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, и теперь все работает нормально. Спасибо