Что может быть не так с этим синтаксисом 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, и теперь все работает нормально. Спасибо

Другие вопросы по тегам